From 8b8b25c97d84f7a518a463e2a30406c31e44e587 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Tue, 23 Aug 2022 15:22:22 +0200 Subject: [PATCH 1/4] fix(docs): docs published with incorrect version number + api docs missing after release (#1066) --- .github/workflows/on-merge-to-main.yml | 2 + .github/workflows/publish-docs-on-release.yml | 23 +++++++++++ .github/workflows/reusable-publish-docs.yml | 39 +++++++++++++++---- 3 files changed, 57 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/publish-docs-on-release.yml diff --git a/.github/workflows/on-merge-to-main.yml b/.github/workflows/on-merge-to-main.yml index 6663eac4b9..a0d754035d 100644 --- a/.github/workflows/on-merge-to-main.yml +++ b/.github/workflows/on-merge-to-main.yml @@ -18,6 +18,8 @@ jobs: secrets: token: ${{ secrets.GITHUB_TOKEN }} run-unit-tests: + needs: get_pr_details + if: ${{ needs.get_pr_details.outputs.prIsMerged == 'true' }} uses: ./.github/workflows/reusable-run-unit-tests.yml publish: needs: diff --git a/.github/workflows/publish-docs-on-release.yml b/.github/workflows/publish-docs-on-release.yml new file mode 100644 index 0000000000..7d5a4fdcc3 --- /dev/null +++ b/.github/workflows/publish-docs-on-release.yml @@ -0,0 +1,23 @@ +name: Publish docs on release + +on: + # Triggered manually + workflow_dispatch: + inputs: + versionNumber: + required: true + type: string + description: "If running this manually please insert a version number that corresponds to the latest published in the GitHub releases (i.e. v1.1.1)" + # Or triggered as result of a release + release: + types: [released] + +jobs: + publish-docs: + uses: ./.github/workflows/reusable-publish-docs.yml + with: + workflow_origin: ${{ github.event.repository.full_name }} + isRelease: "true" + versionNumber: ${{ inputs.versionNumber }} + secrets: + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/reusable-publish-docs.yml b/.github/workflows/reusable-publish-docs.yml index 9003d8d96d..14d9e5deb7 100644 --- a/.github/workflows/reusable-publish-docs.yml +++ b/.github/workflows/reusable-publish-docs.yml @@ -1,4 +1,4 @@ -name: Publish docs +name: Reusable Publish docs on: workflow_call: @@ -14,6 +14,10 @@ on: required: false default: "false" type: string + versionNumber: + required: false + default: "" + type: string secrets: token: required: true @@ -21,7 +25,7 @@ on: jobs: publish-docs: # see https://github.com/awslabs/aws-lambda-powertools-python/issues/1349 - if: inputs.workflow_origin == 'awslabs/aws-lambda-powertools-typescript' + if: ${{ inputs.workflow_origin == 'awslabs/aws-lambda-powertools-typescript' }} runs-on: ubuntu-latest steps: - name: Checkout code @@ -56,17 +60,30 @@ jobs: python-version: "3.8" # We run this step only when the workflow has been triggered by a release # in this case we publish the docs to `/latest` - - name: Set RELEASE_VERSION env var to `latest` + - name: (Conditional) Set RELEASE_VERSION env var to `latest` if: ${{ inputs.isRelease == 'true' }} run: | - RELEASE_VERSION=$(cat packages/commons/package.json | jq '.version' -r) - echo "RELEASE_VERSION=${RELEASE_VERSION}" >> $GITHUB_ENV + RELEASE_VERSION=$(echo ${{ github.ref_name }} | sed 's/v//') + EXPLICIT_RELEASE_VERSION=$(echo ${{ inputs.versionNumber }} | sed 's/v//') + if [ $EXPLICIT_RELEASE_VERSION != "" ]; then + echo "RELEASE_VERSION=${EXPLICIT_RELEASE_VERSION}" + echo "RELEASE_VERSION=${EXPLICIT_RELEASE_VERSION}" >> $GITHUB_ENV + else + echo "RELEASE_VERSION=${RELEASE_VERSION}" + echo "RELEASE_VERSION=${RELEASE_VERSION}" >> $GITHUB_ENV + fi # We run this step only when the workflow has been triggered by a PR merge # in this case we publish the docs to `/dev` - - name: Set RELEASE_VERSION env var to `dev` + - name: (Conditional) Set RELEASE_VERSION env var to `dev` if: ${{ inputs.prIsMerged == 'true' }} run: | echo "RELEASE_VERSION=dev" >> $GITHUB_ENV + - name: Check RELEASE_VERSION env var + if: ${{ env.RELEASE_VERSION == '' }} + uses: actions/github-script@v3 + with: + script: | + core.setFailed('RELEASE_VERSION env var is empty.') - name: Install doc generation dependencies run: | pip install --upgrade pip @@ -75,7 +92,7 @@ jobs: run: | git config --global user.name Docs deploy git config --global user.email docs@dummy.bot.com - - name: Publish docs to latest + - name: Publish docs to latest if isRelease if: ${{ env.RELEASE_VERSION != 'dev' }} run: | rm -rf site @@ -100,3 +117,11 @@ jobs: publish_dir: ./api keep_files: true destination_dir: ${{ env.RELEASE_VERSION }}/api + - name: Release API docs to latest if isRelease + if: ${{ env.RELEASE_VERSION != 'dev' }} + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./api + keep_files: true + destination_dir: latest/api From c3b9a37b6d5885f1750da4f0b226a18734ff0c29 Mon Sep 17 00:00:00 2001 From: Josh Kellendonk Date: Tue, 23 Aug 2022 07:33:05 -0600 Subject: [PATCH 2/4] feat(tracer): allow disabling result capture for decorators and middleware (#1065) * feat(tracer): use decorator options to disable exception and result capture * docs: small inline docs improvements * chore: remove the captureError option * chore: remove all captureLambdaHandler decorator changes * Revert "chore: remove all captureLambdaHandler decorator changes" This reverts commit ae72d52fae318a21b308ad89598134eeb105b3f7. * feat: add middy middleware options * test: add middy options e2e * test: add decorator e2e * refactor: initial review changes * refactor: apply import change from review Co-authored-by: Andrea Amorosi Co-authored-by: Andrea Amorosi --- docs/core/tracer.md | 65 ++++++- packages/tracer/src/Tracer.ts | 15 +- packages/tracer/src/middleware/middy.ts | 9 +- packages/tracer/src/types/Tracer.ts | 22 +++ ...allFeatures.decorator.test.functionCode.ts | 41 ++++- .../tests/e2e/allFeatures.decorator.test.ts | 80 +++++++++ .../allFeatures.middy.test.functionCode.ts | 8 +- .../tests/e2e/allFeatures.middy.test.ts | 72 ++++++++ packages/tracer/tests/helpers/tracesUtils.ts | 3 +- packages/tracer/tests/unit/Tracer.test.ts | 161 ++++++++++++++++++ packages/tracer/tests/unit/middy.test.ts | 53 ++++++ 11 files changed, 513 insertions(+), 16 deletions(-) diff --git a/docs/core/tracer.md b/docs/core/tracer.md index fc4b927d82..fe9c0c31fd 100644 --- a/docs/core/tracer.md +++ b/docs/core/tracer.md @@ -256,7 +256,7 @@ You can trace other Class methods using the `captureMethod` decorator or any arb } const handlerClass = new Lambda(); - export const handler = myFunction.handler.bind(handlerClass); // (1) + export const handler = handlerClass.handler.bind(handlerClass); // (1) ``` 1. Binding your handler method allows your handler to access `this`. @@ -412,6 +412,69 @@ Use **`POWERTOOLS_TRACER_CAPTURE_RESPONSE=false`** environment variable to instr 2. You might manipulate **streaming objects that can be read only once**; this prevents subsequent calls from being empty 3. You might return **more than 64K** of data _e.g., `message too long` error_ +Alternatively, use the `captureResponse: false` option in both `tracer.captureLambdaHandler()` and `tracer.captureMethod()` decorators, or use the same option in the Middy `captureLambdaHander` middleware to instruct Tracer **not** to serialize function responses as metadata. + +=== "method.ts" + + ```typescript hl_lines="6" + import { Tracer } from '@aws-lambda-powertools/tracer'; + + const tracer = new Tracer({ serviceName: 'serverlessAirline' }); + + class Lambda implements LambdaInterface { + @tracer.captureMethod({ captureResult: false }) + public getChargeId(): string { + /* ... */ + return 'foo bar'; + } + + public async handler(_event: any, _context: any): Promise { + /* ... */ + } + } + + const handlerClass = new Lambda(); + export const handler = handlerClass.handler.bind(handlerClass); + ``` + +=== "handler.ts" + + ```typescript hl_lines="7" + import { Tracer } from '@aws-lambda-powertools/tracer'; + import { LambdaInterface } from '@aws-lambda-powertools/commons'; + + const tracer = new Tracer({ serviceName: 'serverlessAirline' }); + + class Lambda implements LambdaInterface { + @tracer.captureLambdaHandler({ captureResponse: false }) + async handler(_event: any, _context: any): Promise { + /* ... */ + } + } + + const handlerClass = new Lambda(); + export const handler = handlerClass.handler.bind(handlerClass); + ``` + +=== "middy.ts" + + ```typescript hl_lines="14" + import { Tracer, captureLambdaHandler } from '@aws-lambda-powertools/tracer'; + import middy from '@middy/core'; + + const tracer = new Tracer({ serviceName: 'serverlessAirline' }); + + const lambdaHandler = async (_event: any, _context: any): Promise => { + /* ... */ + }; + + // Wrap the handler with middy + export const handler = middy(lambdaHandler) + // Use the middleware by passing the Tracer instance as a parameter, + // but specify the captureResponse option as false. + .use(captureLambdaHandler(tracer, { captureResponse: false })); + ``` + ### Disabling exception auto-capture Use **`POWERTOOLS_TRACER_CAPTURE_ERROR=false`** environment variable to instruct Tracer **not** to serialize exceptions as metadata. diff --git a/packages/tracer/src/Tracer.ts b/packages/tracer/src/Tracer.ts index 9a572f45a3..e7663b2673 100644 --- a/packages/tracer/src/Tracer.ts +++ b/packages/tracer/src/Tracer.ts @@ -2,7 +2,7 @@ import { Handler } from 'aws-lambda'; import { AsyncHandler, SyncHandler, Utility } from '@aws-lambda-powertools/commons'; import { TracerInterface } from '.'; import { ConfigServiceInterface, EnvironmentVariablesService } from './config'; -import { HandlerMethodDecorator, TracerOptions, MethodDecorator } from './types'; +import { HandlerMethodDecorator, TracerOptions, HandlerOptions, MethodDecorator } from './types'; import { ProviderService, ProviderServiceInterface } from './provider'; import { Segment, Subsegment } from 'aws-xray-sdk-core'; @@ -339,7 +339,7 @@ class Tracer extends Utility implements TracerInterface { * * @decorator Class */ - public captureLambdaHandler(): HandlerMethodDecorator { + public captureLambdaHandler(options?: HandlerOptions): HandlerMethodDecorator { return (_target, _propertyKey, descriptor) => { /** * The descriptor.value is the method this decorator decorates, it cannot be undefined. @@ -365,7 +365,10 @@ class Tracer extends Utility implements TracerInterface { let result: unknown; try { result = await originalMethod.apply(handlerRef, [ event, context, callback ]); - tracerRef.addResponseAsMetadata(result, process.env._HANDLER); + if (options?.captureResponse ?? true) { + tracerRef.addResponseAsMetadata(result, process.env._HANDLER); + } + } catch (error) { tracerRef.addErrorAsMetadata(error as Error); throw error; @@ -416,7 +419,7 @@ class Tracer extends Utility implements TracerInterface { * * @decorator Class */ - public captureMethod(): MethodDecorator { + public captureMethod(options?: HandlerOptions): MethodDecorator { return (_target, _propertyKey, descriptor) => { // The descriptor.value is the method this decorator decorates, it cannot be undefined. // eslint-disable-next-line @typescript-eslint/no-non-null-assertion @@ -435,7 +438,9 @@ class Tracer extends Utility implements TracerInterface { let result; try { result = await originalMethod.apply(this, [...args]); - tracerRef.addResponseAsMetadata(result, originalMethod.name); + if (options?.captureResponse ?? true) { + tracerRef.addResponseAsMetadata(result, originalMethod.name); + } } catch (error) { tracerRef.addErrorAsMetadata(error as Error); diff --git a/packages/tracer/src/middleware/middy.ts b/packages/tracer/src/middleware/middy.ts index bac2490177..0774e02fda 100644 --- a/packages/tracer/src/middleware/middy.ts +++ b/packages/tracer/src/middleware/middy.ts @@ -1,9 +1,10 @@ import type middy from '@middy/core'; import type { Tracer } from '../Tracer'; import type { Segment, Subsegment } from 'aws-xray-sdk-core'; +import type { HandlerOptions } from '../types'; /** - * A middy middleware automating capture of metadata and annotations on segments or subsegments ofr a Lambda Handler. + * A middy middleware automating capture of metadata and annotations on segments or subsegments for a Lambda Handler. * * Using this middleware on your handler function will automatically: * * handle the subsegment lifecycle @@ -26,7 +27,7 @@ import type { Segment, Subsegment } from 'aws-xray-sdk-core'; * @param target - The Tracer instance to use for tracing * @returns middleware object - The middy middleware object */ -const captureLambdaHandler = (target: Tracer): middy.MiddlewareObj => { +const captureLambdaHandler = (target: Tracer, options?: HandlerOptions): middy.MiddlewareObj => { let lambdaSegment: Subsegment | Segment; const open = (): void => { @@ -51,7 +52,9 @@ const captureLambdaHandler = (target: Tracer): middy.MiddlewareObj => { const captureLambdaHandlerAfter = async (request: middy.Request): Promise => { if (target.isTracingEnabled()) { - target.addResponseAsMetadata(request.response, process.env._HANDLER); + if (options?.captureResponse ?? true) { + target.addResponseAsMetadata(request.response, process.env._HANDLER); + } close(); } }; diff --git a/packages/tracer/src/types/Tracer.ts b/packages/tracer/src/types/Tracer.ts index 288a65c23e..9003b1e997 100644 --- a/packages/tracer/src/types/Tracer.ts +++ b/packages/tracer/src/types/Tracer.ts @@ -26,6 +26,27 @@ type TracerOptions = { customConfigService?: ConfigServiceInterface }; +/** + * Options for handler decorators and middleware. + * + * Usage: + * @example + * ```typescript + * const tracer = new Tracer(); + * + * class Lambda implements LambdaInterface { + * @tracer.captureLambdaHandler({ captureResponse: false }) + * async handler(_event: any, _context: any): Promise {} + * } + * + * const handlerClass = new Lambda(); + * export const handler = handlerClass.handler.bind(handlerClass); + * ``` + */ +type HandlerOptions = { + captureResponse?: boolean +}; + type HandlerMethodDecorator = ( target: LambdaInterface, propertyKey: string | symbol, @@ -38,6 +59,7 @@ type MethodDecorator = (target: any, propertyKey: string | symbol, descriptor: T export { TracerOptions, + HandlerOptions, HandlerMethodDecorator, MethodDecorator }; \ No newline at end of file diff --git a/packages/tracer/tests/e2e/allFeatures.decorator.test.functionCode.ts b/packages/tracer/tests/e2e/allFeatures.decorator.test.functionCode.ts index 000faf567e..337aec311d 100644 --- a/packages/tracer/tests/e2e/allFeatures.decorator.test.functionCode.ts +++ b/packages/tracer/tests/e2e/allFeatures.decorator.test.functionCode.ts @@ -35,14 +35,13 @@ const refreshAWSSDKImport = (): void => { const tracer = new Tracer({ serviceName: serviceName }); const dynamoDBv3 = tracer.captureAWSv3Client(new DynamoDBClient({})); -export class MyFunctionWithDecorator { +export class MyFunctionBase { private readonly returnValue: string; public constructor() { this.returnValue = customResponseValue; } - @tracer.captureLambdaHandler() // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore public handler(event: CustomEvent, _context: Context, _callback: Callback): void | Promise { @@ -79,7 +78,6 @@ export class MyFunctionWithDecorator { }); } - @tracer.captureMethod() // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore public myMethod(): string { @@ -87,5 +85,40 @@ export class MyFunctionWithDecorator { } } +class MyFunctionWithDecorator extends MyFunctionBase { + @tracer.captureLambdaHandler() + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + public handler(event: CustomEvent, _context: Context, _callback: Callback): void | Promise { + return super.handler(event, _context, _callback); + } + + @tracer.captureMethod() + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + public myMethod(): string { + return super.myMethod(); + } +} + const handlerClass = new MyFunctionWithDecorator(); -export const handler = handlerClass.handler.bind(handlerClass); \ No newline at end of file +export const handler = handlerClass.handler.bind(handlerClass); + +class MyFunctionWithDecoratorCaptureResponseFalse extends MyFunctionBase { + @tracer.captureLambdaHandler({ captureResponse: false }) + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + public handler(event: CustomEvent, _context: Context, _callback: Callback): void | Promise { + return super.handler(event, _context, _callback); + } + + @tracer.captureMethod({ captureResponse: false }) + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + public myMethod(): string { + return super.myMethod(); + } +} + +const handlerWithCaptureResponseFalseClass = new MyFunctionWithDecoratorCaptureResponseFalse(); +export const handlerWithCaptureResponseFalse = handlerClass.handler.bind(handlerWithCaptureResponseFalseClass); \ No newline at end of file diff --git a/packages/tracer/tests/e2e/allFeatures.decorator.test.ts b/packages/tracer/tests/e2e/allFeatures.decorator.test.ts index 5c2272f18a..befe56830b 100644 --- a/packages/tracer/tests/e2e/allFeatures.decorator.test.ts +++ b/packages/tracer/tests/e2e/allFeatures.decorator.test.ts @@ -78,6 +78,13 @@ const uuidFunction3 = v4(); const functionNameWithTracerDisabled = generateUniqueName(RESOURCE_NAME_PREFIX, uuidFunction3, runtime, 'AllFeatures-Decorator-TracerDisabled'); const serviceNameWithTracerDisabled = functionNameWithNoCaptureErrorOrResponse; +/** + * Function #4 disables tracer + */ +const uuidFunction4 = v4(); +const functionNameWithCaptureResponseFalse = generateUniqueName(RESOURCE_NAME_PREFIX, uuidFunction4, runtime, 'AllFeatures-Decorator-CaptureResponseFalse'); +const serviceNameWithCaptureResponseFalse = functionNameWithCaptureResponseFalse; + const xray = new AWS.XRay(); const invocations = 3; @@ -149,6 +156,22 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim }); ddbTable.grantWriteData(functionWithTracerDisabled); + const functionWithCaptureResponseFalse = createTracerTestFunction({ + stack, + functionName: functionNameWithCaptureResponseFalse, + handler: 'handlerWithCaptureResponseFalse', + entry, + expectedServiceName: serviceNameWithCaptureResponseFalse, + environmentParams: { + TEST_TABLE_NAME: ddbTableName, + POWERTOOLS_TRACER_CAPTURE_RESPONSE: 'true', + POWERTOOLS_TRACER_CAPTURE_ERROR: 'true', + POWERTOOLS_TRACE_ENABLED: 'true', + }, + runtime + }); + ddbTable.grantWriteData(functionWithCaptureResponseFalse); + await deployStack(integTestApp, stack); // Act @@ -156,6 +179,7 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim invokeAllTestCases(functionNameWithAllFlagsEnabled), invokeAllTestCases(functionNameWithNoCaptureErrorOrResponse), invokeAllTestCases(functionNameWithTracerDisabled), + invokeAllTestCases(functionNameWithCaptureResponseFalse), ]); }, SETUP_TIMEOUT); @@ -303,6 +327,62 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim }, TEST_CASE_TIMEOUT); + it('should not capture response when the decorator\'s captureResponse is set to false', async () => { + + const tracesWithCaptureResponseFalse = await getTraces(xray, startTime, await getFunctionArn(functionNameWithCaptureResponseFalse), invocations, 5); + + expect(tracesWithCaptureResponseFalse.length).toBe(invocations); + + // Assess + for (let i = 0; i < invocations; i++) { + const trace = tracesWithCaptureResponseFalse[i]; + + /** + * Expect the trace to have 5 segments: + * 1. Lambda Context (AWS::Lambda) + * 2. Lambda Function (AWS::Lambda::Function) + * 3. DynamoDB (AWS::DynamoDB) + * 4. DynamoDB Table (AWS::DynamoDB::Table) + * 5. Remote call (httpbin.org) + */ + expect(trace.Segments.length).toBe(5); + const invocationSubsegment = getInvocationSubsegment(trace); + + /** + * Invocation subsegment should have a subsegment '## index.handler' (default behavior for PowerTool tracer) + * '## index.handler' subsegment should have 4 subsegments + * 1. DynamoDB (PutItem on the table) + * 2. DynamoDB (PutItem overhead) + * 3. httpbin.org (Remote call) + * 4. '### myMethod' (method decorator) + */ + const handlerSubsegment = getFirstSubsegment(invocationSubsegment); + expect(handlerSubsegment.name).toBe('## index.handlerWithCaptureResponseFalse'); + expect(handlerSubsegment?.subsegments).toHaveLength(4); + + if (!handlerSubsegment.subsegments) { + fail('"## index.handlerWithCaptureResponseFalse" subsegment should have subsegments'); + } + const subsegments = splitSegmentsByName(handlerSubsegment.subsegments, [ 'DynamoDB', 'httpbin.org', '### myMethod' ]); + expect(subsegments.get('DynamoDB')?.length).toBe(2); + expect(subsegments.get('httpbin.org')?.length).toBe(1); + expect(subsegments.get('### myMethod')?.length).toBe(1); + expect(subsegments.get('other')?.length).toBe(0); + + // No metadata because capturing the response was disabled and that's + // the only metadata that could be in the subsegment for the test. + const myMethodSegment = subsegments.get('### myMethod')?.[0]; + expect(myMethodSegment).toBeDefined(); + expect(myMethodSegment).not.toHaveProperty('metadata'); + + const shouldThrowAnError = (i === (invocations - 1)); + if (shouldThrowAnError) { + assertErrorAndFault(invocationSubsegment, expectedCustomErrorMessage); + } + } + + }, TEST_CASE_TIMEOUT); + it('should not capture any custom traces when disabled', async () => { const expectedNoOfTraces = 2; const tracesWithTracerDisabled = await getTraces(xray, startTime, await getFunctionArn(functionNameWithTracerDisabled), invocations, expectedNoOfTraces); diff --git a/packages/tracer/tests/e2e/allFeatures.middy.test.functionCode.ts b/packages/tracer/tests/e2e/allFeatures.middy.test.functionCode.ts index 47c58be13e..a5b3f35ea5 100644 --- a/packages/tracer/tests/e2e/allFeatures.middy.test.functionCode.ts +++ b/packages/tracer/tests/e2e/allFeatures.middy.test.functionCode.ts @@ -36,7 +36,7 @@ const refreshAWSSDKImport = (): void => { const tracer = new Tracer({ serviceName: serviceName }); const dynamoDBv3 = tracer.captureAWSv3Client(new DynamoDBClient({})); -export const handler = middy(async (event: CustomEvent, _context: Context): Promise => { +const testHandler = async (event: CustomEvent, _context: Context): Promise => { tracer.putAnnotation('invocation', event.invocation); tracer.putAnnotation(customAnnotationKey, customAnnotationValue); tracer.putMetadata(customMetadataKey, customMetadataValue); @@ -63,4 +63,8 @@ export const handler = middy(async (event: CustomEvent, _context: Context): Prom } catch (err) { throw err; } -}).use(captureLambdaHandler(tracer)); \ No newline at end of file +}; + +export const handler = middy(testHandler).use(captureLambdaHandler(tracer)); + +export const handlerWithNoCaptureResponseViaMiddlewareOption = middy(testHandler).use(captureLambdaHandler(tracer, { captureResponse: false })); \ No newline at end of file diff --git a/packages/tracer/tests/e2e/allFeatures.middy.test.ts b/packages/tracer/tests/e2e/allFeatures.middy.test.ts index 2f4b7cf931..ba314268a5 100644 --- a/packages/tracer/tests/e2e/allFeatures.middy.test.ts +++ b/packages/tracer/tests/e2e/allFeatures.middy.test.ts @@ -78,6 +78,13 @@ const uuidFunction3 = v4(); const functionNameWithTracerDisabled = generateUniqueName(RESOURCE_NAME_PREFIX, uuidFunction3, runtime, 'AllFeatures-Middy-TracerDisabled'); const serviceNameWithTracerDisabled = functionNameWithNoCaptureErrorOrResponse; +/** + * Function #4 doesn't capture response + */ +const uuidFunction4 = v4(); +const functionNameWithNoCaptureResponseViaMiddlewareOption = generateUniqueName(RESOURCE_NAME_PREFIX, uuidFunction4, runtime, 'AllFeatures-Middy-NoCaptureResponse2'); +const serviceNameWithNoCaptureResponseViaMiddlewareOption = functionNameWithNoCaptureResponseViaMiddlewareOption; + const xray = new AWS.XRay(); const invocations = 3; @@ -149,6 +156,22 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ }); ddbTable.grantWriteData(functionWithTracerDisabled); + const functionThatDoesNotCaptureResponseViaMiddlewareOption = createTracerTestFunction({ + stack, + functionName: functionNameWithNoCaptureResponseViaMiddlewareOption, + entry, + handler: 'handlerWithNoCaptureResponseViaMiddlewareOption', + expectedServiceName: serviceNameWithNoCaptureResponseViaMiddlewareOption, + environmentParams: { + TEST_TABLE_NAME: ddbTableName, + POWERTOOLS_TRACER_CAPTURE_RESPONSE: 'true', + POWERTOOLS_TRACER_CAPTURE_ERROR: 'true', + POWERTOOLS_TRACE_ENABLED: 'true', + }, + runtime + }); + ddbTable.grantWriteData(functionThatDoesNotCaptureResponseViaMiddlewareOption); + await deployStack(integTestApp, stack); // Act @@ -156,6 +179,7 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ invokeAllTestCases(functionNameWithAllFlagsEnabled), invokeAllTestCases(functionNameWithNoCaptureErrorOrResponse), invokeAllTestCases(functionNameWithTracerDisabled), + invokeAllTestCases(functionNameWithNoCaptureResponseViaMiddlewareOption), ]); }, SETUP_TIMEOUT); @@ -299,6 +323,54 @@ describe(`Tracer E2E tests, all features with middy instantiation for runtime: $ }, TEST_CASE_TIMEOUT); + it('should not capture response when the middleware\'s captureResponse is set to false', async () => { + + const tracesWithNoCaptureResponse = await getTraces(xray, startTime, await getFunctionArn(functionNameWithNoCaptureResponseViaMiddlewareOption), invocations, 5); + + expect(tracesWithNoCaptureResponse.length).toBe(invocations); + + // Assess + for (let i = 0; i < invocations; i++) { + const trace = tracesWithNoCaptureResponse[i]; + + /** + * Expect the trace to have 5 segments: + * 1. Lambda Context (AWS::Lambda) + * 2. Lambda Function (AWS::Lambda::Function) + * 3. DynamoDB (AWS::DynamoDB) + * 4. DynamoDB Table (AWS::DynamoDB::Table) + * 5. Remote call (httpbin.org) + */ + expect(trace.Segments.length).toBe(5); + const invocationSubsegment = getInvocationSubsegment(trace); + + /** + * Invocation subsegment should have a subsegment '## index.handlerWithNoCaptureResponseViaMiddlewareOption' (default behavior for PowerTool tracer) + * '## index.handlerWithNoCaptureResponseViaMiddlewareOption' subsegment should have 3 subsegments + * 1. DynamoDB (PutItem on the table) + * 2. DynamoDB (PutItem overhead) + * 3. httpbin.org (Remote call) + */ + const handlerSubsegment = getFirstSubsegment(invocationSubsegment); + expect(handlerSubsegment.name).toBe('## index.handlerWithNoCaptureResponseViaMiddlewareOption'); + expect(handlerSubsegment?.subsegments).toHaveLength(3); + + if (!handlerSubsegment.subsegments) { + fail('"## index.handlerWithNoCaptureResponseViaMiddlewareOption" subsegment should have subsegments'); + } + const subsegments = splitSegmentsByName(handlerSubsegment.subsegments, [ 'DynamoDB', 'httpbin.org' ]); + expect(subsegments.get('DynamoDB')?.length).toBe(2); + expect(subsegments.get('httpbin.org')?.length).toBe(1); + expect(subsegments.get('other')?.length).toBe(0); + + const shouldThrowAnError = (i === (invocations - 1)); + if (shouldThrowAnError) { + assertErrorAndFault(invocationSubsegment, expectedCustomErrorMessage); + } + } + + }, TEST_CASE_TIMEOUT); + it('should not capture any custom traces when disabled', async () => { const expectedNoOfTraces = 2; const tracesWithTracerDisabled = await getTraces(xray, startTime, await getFunctionArn(functionNameWithTracerDisabled), invocations, expectedNoOfTraces); diff --git a/packages/tracer/tests/helpers/tracesUtils.ts b/packages/tracer/tests/helpers/tracesUtils.ts index 117b05501c..f41b744ad5 100644 --- a/packages/tracer/tests/helpers/tracesUtils.ts +++ b/packages/tracer/tests/helpers/tracesUtils.ts @@ -79,6 +79,7 @@ export interface ParsedTrace { interface TracerTestFunctionParams { stack: Stack functionName: string + handler?: string entry: string expectedServiceName: string environmentParams: { [key: string]: string } @@ -237,7 +238,7 @@ const createTracerTestFunction = (params: TracerTestFunctionParams): NodejsFunct const func = new NodejsFunction(stack, functionName, { entry: entry, functionName: functionName, - handler: 'handler', + handler: params.handler ?? 'handler', tracing: Tracing.ACTIVE, architecture: Architecture.X86_64, memorySize: 256, // Default value (128) will take too long to process diff --git a/packages/tracer/tests/unit/Tracer.test.ts b/packages/tracer/tests/unit/Tracer.test.ts index b0100b42d3..4e77ebf490 100644 --- a/packages/tracer/tests/unit/Tracer.test.ts +++ b/packages/tracer/tests/unit/Tracer.test.ts @@ -648,6 +648,77 @@ describe('Class: Tracer', () => { }); + test('when used as decorator while captureResponse is set to false, it does not capture the response as metadata', async () => { + + // Prepare + const tracer: Tracer = new Tracer(); + const newSubsegment: Segment | Subsegment | undefined = new Subsegment('## index.handler'); + jest.spyOn(tracer.provider, 'getSegment').mockImplementation(() => newSubsegment); + setContextMissingStrategy(() => null); + const captureAsyncFuncSpy = jest.spyOn(tracer.provider, 'captureAsyncFunc'); + class Lambda implements LambdaInterface { + + @tracer.captureLambdaHandler({ captureResponse: false }) + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + public handler(_event: TEvent, _context: Context, _callback: Callback): void | Promise { + return new Promise((resolve, _reject) => resolve({ + foo: 'bar' + } as unknown as TResult)); + } + + } + + // Act + await new Lambda().handler(event, context, () => console.log('Lambda invoked!')); + + // Assess + expect(captureAsyncFuncSpy).toHaveBeenCalledTimes(1); + expect('metadata' in newSubsegment).toBe(false); + + }); + + test('when used as decorator while captureResponse is set to true, it captures the response as metadata', async () => { + + // Prepare + const tracer: Tracer = new Tracer(); + const newSubsegment: Segment | Subsegment | undefined = new Subsegment('## index.handler'); + jest.spyOn(tracer.provider, 'getSegment') + .mockImplementation(() => newSubsegment); + setContextMissingStrategy(() => null); + const captureAsyncFuncSpy = jest.spyOn(tracer.provider, 'captureAsyncFunc'); + class Lambda implements LambdaInterface { + + @tracer.captureLambdaHandler({ captureResponse: true }) + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + public handler(_event: TEvent, _context: Context, _callback: Callback): void | Promise { + return new Promise((resolve, _reject) => resolve({ + foo: 'bar' + } as unknown as TResult)); + } + + } + + // Act + await new Lambda().handler(event, context, () => console.log('Lambda invoked!')); + + // Assess + expect(captureAsyncFuncSpy).toHaveBeenCalledTimes(1); + expect(captureAsyncFuncSpy).toHaveBeenCalledWith('## index.handler', expect.anything()); + expect(newSubsegment).toEqual(expect.objectContaining({ + name: '## index.handler', + metadata: { + 'hello-world': { + 'index.handler response': { + foo: 'bar', + }, + }, + } + })); + + }); + test('when used as decorator and with standard config, it captures the response as metadata', async () => { // Prepare @@ -964,6 +1035,96 @@ describe('Class: Tracer', () => { }); + test('when used as decorator and with captureResponse set to false, it does not capture the response as metadata', async () => { + + // Prepare + const tracer: Tracer = new Tracer(); + const newSubsegment: Segment | Subsegment | undefined = new Subsegment('### dummyMethod'); + jest.spyOn(newSubsegment, 'flush').mockImplementation(() => null); + jest.spyOn(tracer.provider, 'getSegment') + .mockImplementation(() => newSubsegment); + setContextMissingStrategy(() => null); + const captureAsyncFuncSpy = jest.spyOn(tracer.provider, 'captureAsyncFunc'); + class Lambda implements LambdaInterface { + + @tracer.captureMethod({ captureResponse: false }) + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + public async dummyMethod(some: string): Promise { + return new Promise((resolve, _reject) => setTimeout(() => resolve(some), 3000)); + } + + public async handler(_event: TEvent, _context: Context, _callback: Callback): Promise { + const result = await this.dummyMethod('foo bar'); + + return new Promise((resolve, _reject) => resolve(result as unknown as TResult)); + } + + } + + // Act + await new Lambda().handler(event, context, () => console.log('Lambda invoked!')); + + // Assess + expect(captureAsyncFuncSpy).toHaveBeenCalledTimes(1); + expect(captureAsyncFuncSpy).toHaveBeenCalledWith('### dummyMethod', expect.anything()); + expect(newSubsegment).toEqual(expect.objectContaining({ + name: '### dummyMethod', + })); + expect(newSubsegment).not.toEqual(expect.objectContaining({ + metadata: { + 'hello-world': { + 'dummyMethod response': 'foo bar', + }, + } + })); + + }); + + test('when used as decorator and with captureResponse set to true, it does captures the response as metadata', async () => { + + // Prepare + const tracer: Tracer = new Tracer(); + const newSubsegment: Segment | Subsegment | undefined = new Subsegment('### dummyMethod'); + jest.spyOn(newSubsegment, 'flush').mockImplementation(() => null); + jest.spyOn(tracer.provider, 'getSegment') + .mockImplementation(() => newSubsegment); + setContextMissingStrategy(() => null); + const captureAsyncFuncSpy = jest.spyOn(tracer.provider, 'captureAsyncFunc'); + class Lambda implements LambdaInterface { + + @tracer.captureMethod() + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + public async dummyMethod(some: string): Promise { + return new Promise((resolve, _reject) => setTimeout(() => resolve(some), 3000)); + } + + public async handler(_event: TEvent, _context: Context, _callback: Callback): Promise { + const result = await this.dummyMethod('foo bar'); + + return new Promise((resolve, _reject) => resolve(result as unknown as TResult)); + } + + } + + // Act + await new Lambda().handler(event, context, () => console.log('Lambda invoked!')); + + // Assess + expect(captureAsyncFuncSpy).toHaveBeenCalledTimes(1); + expect(captureAsyncFuncSpy).toHaveBeenCalledWith('### dummyMethod', expect.anything()); + expect(newSubsegment).toEqual(expect.objectContaining({ + name: '### dummyMethod', + metadata: { + 'hello-world': { + 'dummyMethod response': 'foo bar', + }, + } + })); + + }); + test('when used as decorator and with standard config, it captures the exception correctly', async () => { // Prepare diff --git a/packages/tracer/tests/unit/middy.test.ts b/packages/tracer/tests/unit/middy.test.ts index 55b72dde7a..f1b33b01be 100644 --- a/packages/tracer/tests/unit/middy.test.ts +++ b/packages/tracer/tests/unit/middy.test.ts @@ -109,6 +109,59 @@ describe('Middy middleware', () => { }); + test('when used while captureResponse set to false, it does not capture the response as metadata', async () => { + + // Prepare + const tracer: Tracer = new Tracer(); + const newSubsegment: Segment | Subsegment | undefined = new Subsegment('## index.handler'); + const setSegmentSpy = jest.spyOn(tracer.provider, 'setSegment').mockImplementation(); + jest.spyOn(tracer.provider, 'getSegment').mockImplementation(() => newSubsegment); + setContextMissingStrategy(() => null); + const lambdaHandler: Handler = async (_event: unknown, _context: Context) => ({ + foo: 'bar' + }); + const handler = middy(lambdaHandler).use(captureLambdaHandler(tracer, { captureResponse: false })); + + // Act + await handler({}, context, () => console.log('Lambda invoked!')); + + // Assess + expect(setSegmentSpy).toHaveBeenCalledTimes(2); + expect('metadata' in newSubsegment).toBe(false); + + }); + + test('when used while captureResponse set to true, it captures the response as metadata', async () => { + + // Prepare + const tracer: Tracer = new Tracer(); + const newSubsegment: Segment | Subsegment | undefined = new Subsegment('## index.handler'); + const setSegmentSpy = jest.spyOn(tracer.provider, 'setSegment').mockImplementation(); + jest.spyOn(tracer.provider, 'getSegment').mockImplementation(() => newSubsegment); + setContextMissingStrategy(() => null); + const lambdaHandler: Handler = async (_event: unknown, _context: Context) => ({ + foo: 'bar' + }); + const handler = middy(lambdaHandler).use(captureLambdaHandler(tracer, { captureResponse: true })); + + // Act + await handler({}, context, () => console.log('Lambda invoked!')); + + // Assess + expect(setSegmentSpy).toHaveBeenCalledTimes(2); + expect(newSubsegment).toEqual(expect.objectContaining({ + name: '## index.handler', + metadata: { + 'hello-world': { + 'index.handler response': { + foo: 'bar', + }, + }, + } + })); + + }); + test('when used with standard config, it captures the response as metadata', async () => { // Prepare From 7b9a0278ccf801a521cab3f74372a4748231fd11 Mon Sep 17 00:00:00 2001 From: Stephan Date: Tue, 23 Aug 2022 16:11:02 +0200 Subject: [PATCH 3/4] feat(metrics): increase maximum dimensions to 29 (#1072) * improv(metrics): Add support to 30 dimensions * docs(metrics): update max dimensions --- docs/core/metrics.md | 2 +- packages/metrics/src/Metrics.ts | 2 +- packages/metrics/tests/unit/Metrics.test.ts | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/core/metrics.md b/docs/core/metrics.md index c357a3630c..e2770de640 100644 --- a/docs/core/metrics.md +++ b/docs/core/metrics.md @@ -301,7 +301,7 @@ If you do not use the middleware or decorator, you have to flush your metrics ma !!! warning "Metric validation" If metrics are provided, and any of the following criteria are not met, a **`RangeError`** exception will be thrown: - * Maximum of 9 dimensions + * Maximum of 29 dimensions * Namespace is set only once (or none) * Metric units must be [supported by CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) diff --git a/packages/metrics/src/Metrics.ts b/packages/metrics/src/Metrics.ts index 39a0d09ecd..429e8a7d54 100644 --- a/packages/metrics/src/Metrics.ts +++ b/packages/metrics/src/Metrics.ts @@ -14,7 +14,7 @@ import { } from './types'; const MAX_METRICS_SIZE = 100; -const MAX_DIMENSION_COUNT = 9; +const MAX_DIMENSION_COUNT = 29; const DEFAULT_NAMESPACE = 'default_namespace'; /** diff --git a/packages/metrics/tests/unit/Metrics.test.ts b/packages/metrics/tests/unit/Metrics.test.ts index bb59bde57a..345306714e 100644 --- a/packages/metrics/tests/unit/Metrics.test.ts +++ b/packages/metrics/tests/unit/Metrics.test.ts @@ -13,7 +13,7 @@ import { Metrics, MetricUnits } from '../../src/'; import { populateEnvironmentVariables } from '../helpers'; const MAX_METRICS_SIZE = 100; -const MAX_DIMENSION_COUNT = 9; +const MAX_DIMENSION_COUNT = 29; const DEFAULT_NAMESPACE = 'default_namespace'; const consoleSpy = jest.spyOn(console, 'log').mockImplementation(); @@ -371,7 +371,7 @@ describe('Class: Metrics', () => { } }); - test('Error should be thrown on empty metrics when throwOnEmptyMetrics() is callse', async () => { + test('Error should be thrown on empty metrics when throwOnEmptyMetrics() is called', async () => { expect.assertions(1); const metrics = new Metrics({ namespace: 'test' }); @@ -459,6 +459,7 @@ describe('Class: Metrics', () => { }); test('Should throw an error if the same metric name is added again with a different unit', ()=> { + expect.assertions(1); const metrics = new Metrics(); metrics.addMetric('test_name', MetricUnits.Count, 2); From 15269d95e4775af22afea86274f84c195377c88e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 23 Aug 2022 14:58:53 +0000 Subject: [PATCH 4/4] chore(release): v1.2.0 [skip ci] --- CHANGELOG.md | 17 ++++++++ examples/cdk/CHANGELOG.md | 8 ++++ examples/cdk/package-lock.json | 70 +++++++++++++++---------------- examples/cdk/package.json | 8 ++-- examples/sam/CHANGELOG.md | 8 ++++ examples/sam/package-lock.json | 70 +++++++++++++++---------------- examples/sam/package.json | 8 ++-- layer-publisher/CHANGELOG.md | 8 ++++ layer-publisher/package-lock.json | 2 +- layer-publisher/package.json | 2 +- lerna.json | 2 +- packages/commons/CHANGELOG.md | 8 ++++ packages/commons/package.json | 2 +- packages/logger/CHANGELOG.md | 8 ++++ packages/logger/package.json | 4 +- packages/metrics/CHANGELOG.md | 11 +++++ packages/metrics/package.json | 4 +- packages/tracer/CHANGELOG.md | 11 +++++ packages/tracer/package.json | 4 +- 19 files changed, 167 insertions(+), 88 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e009e064ce..9cc6562fd1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,23 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.2.0](https://github.com/awslabs/aws-lambda-powertools-typescript/compare/v1.1.1...v1.2.0) (2022-08-23) + + +### Bug Fixes + +* **docs:** docs published with incorrect version number + api docs missing after release ([#1066](https://github.com/awslabs/aws-lambda-powertools-typescript/issues/1066)) ([8b8b25c](https://github.com/awslabs/aws-lambda-powertools-typescript/commit/8b8b25c97d84f7a518a463e2a30406c31e44e587)) + + +### Features + +* **metrics:** increase maximum dimensions to 29 ([#1072](https://github.com/awslabs/aws-lambda-powertools-typescript/issues/1072)) ([7b9a027](https://github.com/awslabs/aws-lambda-powertools-typescript/commit/7b9a0278ccf801a521cab3f74372a4748231fd11)) +* **tracer:** allow disabling result capture for decorators and middleware ([#1065](https://github.com/awslabs/aws-lambda-powertools-typescript/issues/1065)) ([c3b9a37](https://github.com/awslabs/aws-lambda-powertools-typescript/commit/c3b9a37b6d5885f1750da4f0b226a18734ff0c29)) + + + + + ## [1.1.1](https://github.com/awslabs/aws-lambda-powertools-typescript/compare/v1.1.0...v1.1.1) (2022-08-18) diff --git a/examples/cdk/CHANGELOG.md b/examples/cdk/CHANGELOG.md index d1bb059d46..a8c5958fc1 100644 --- a/examples/cdk/CHANGELOG.md +++ b/examples/cdk/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.2.0](https://github.com/awslabs/aws-lambda-powertools-typescript/compare/v1.1.1...v1.2.0) (2022-08-23) + +**Note:** Version bump only for package cdk-app + + + + + ## [1.1.1](https://github.com/awslabs/aws-lambda-powertools-typescript/compare/v1.1.0...v1.1.1) (2022-08-18) **Note:** Version bump only for package cdk-app diff --git a/examples/cdk/package-lock.json b/examples/cdk/package-lock.json index 1c83b2548b..1a255c2c90 100644 --- a/examples/cdk/package-lock.json +++ b/examples/cdk/package-lock.json @@ -1,17 +1,17 @@ { "name": "cdk-app", - "version": "1.1.1", + "version": "1.2.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "cdk-app", - "version": "1.1.1", + "version": "1.2.0", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/logger": "^1.1.0", - "@aws-lambda-powertools/metrics": "^1.1.0", - "@aws-lambda-powertools/tracer": "^1.1.0", + "@aws-lambda-powertools/logger": "^1.1.1", + "@aws-lambda-powertools/metrics": "^1.1.1", + "@aws-lambda-powertools/tracer": "^1.1.1", "@aws-sdk/client-sts": "^3.53.0", "@middy/core": "^2.5.6", "@types/aws-lambda": "^8.10.86", @@ -123,35 +123,35 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-lambda-powertools/commons": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/commons/-/commons-1.1.0.tgz", - "integrity": "sha512-SHbdUH7S2keBJQbAgXENbu1bVemHfSPvNZBvgiK1yoT7WYffl8qey3amP6GAgZA2761bhy9XawI2apOqaGHWBA==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/commons/-/commons-1.1.1.tgz", + "integrity": "sha512-EUk+2Q7GNQwLYyCfV8m+yso3ELrRVCX8wbZdgl2i1XCUmoxskwEV/j4T8+jxMMms/f7k+rDM7Jwh4+6vmONieQ==" }, "node_modules/@aws-lambda-powertools/logger": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/logger/-/logger-1.1.0.tgz", - "integrity": "sha512-2iaeqrPuodZGxEt4Cbag8OGRsE2ujakNjb5laMneo3mNTpQhEKG4E5W266xeTe66xF4uR8v3rDyu9fIdpKHwFw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/logger/-/logger-1.1.1.tgz", + "integrity": "sha512-zr9dw3k9ZT1LDOmOQn0w7CWWzPyXhAn6DcOdq2WFdRIdne3YOG1qmF/jjTs5A2CGht8mN/z8MsWPDQAx89SWwQ==", "dependencies": { - "@aws-lambda-powertools/commons": "^1.1.0", + "@aws-lambda-powertools/commons": "^1.1.1", "lodash.clonedeep": "^4.5.0", "lodash.merge": "^4.6.2", "lodash.pickby": "^4.6.0" } }, "node_modules/@aws-lambda-powertools/metrics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/metrics/-/metrics-1.1.0.tgz", - "integrity": "sha512-F2Vm16DmhVJhVzDN1hPEH0kB5uHXZIEO7EC72b+RY4G0EQ/Yqj604e/MsSrYeew32LRjuQv9nn8hvNISpvHTJw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/metrics/-/metrics-1.1.1.tgz", + "integrity": "sha512-ZLHyjifmQE5+L0QiX/UPVSc9DQXdns3cMrI0Q9/6cQDntZpenc4+lcwOdHhD4LYlxeKBLHOvX3rhOhCMLpGEPw==", "dependencies": { - "@aws-lambda-powertools/commons": "^1.1.0" + "@aws-lambda-powertools/commons": "^1.1.1" } }, "node_modules/@aws-lambda-powertools/tracer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/tracer/-/tracer-1.1.0.tgz", - "integrity": "sha512-2uym1Ten54ysBEJFSB+yAnkHYcPkntCthwp2I10EYGtifkgxvAKn340nxZtJMpCNLpToat0mMLLCEuAK0Y+Rzg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/tracer/-/tracer-1.1.1.tgz", + "integrity": "sha512-j3ZjozHxjLOLqCuObfuz5VdzoaOkVHVHzectVYtnimW8XEfyrV8wufp91F2noU9szMGtVVZaFcpilXVp8/b/MQ==", "dependencies": { - "@aws-lambda-powertools/commons": "^1.1.0", + "@aws-lambda-powertools/commons": "^1.1.1", "aws-xray-sdk-core": "^3.3.6" } }, @@ -6731,35 +6731,35 @@ } }, "@aws-lambda-powertools/commons": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/commons/-/commons-1.1.0.tgz", - "integrity": "sha512-SHbdUH7S2keBJQbAgXENbu1bVemHfSPvNZBvgiK1yoT7WYffl8qey3amP6GAgZA2761bhy9XawI2apOqaGHWBA==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/commons/-/commons-1.1.1.tgz", + "integrity": "sha512-EUk+2Q7GNQwLYyCfV8m+yso3ELrRVCX8wbZdgl2i1XCUmoxskwEV/j4T8+jxMMms/f7k+rDM7Jwh4+6vmONieQ==" }, "@aws-lambda-powertools/logger": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/logger/-/logger-1.1.0.tgz", - "integrity": "sha512-2iaeqrPuodZGxEt4Cbag8OGRsE2ujakNjb5laMneo3mNTpQhEKG4E5W266xeTe66xF4uR8v3rDyu9fIdpKHwFw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/logger/-/logger-1.1.1.tgz", + "integrity": "sha512-zr9dw3k9ZT1LDOmOQn0w7CWWzPyXhAn6DcOdq2WFdRIdne3YOG1qmF/jjTs5A2CGht8mN/z8MsWPDQAx89SWwQ==", "requires": { - "@aws-lambda-powertools/commons": "^1.1.0", + "@aws-lambda-powertools/commons": "^1.1.1", "lodash.clonedeep": "^4.5.0", "lodash.merge": "^4.6.2", "lodash.pickby": "^4.6.0" } }, "@aws-lambda-powertools/metrics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/metrics/-/metrics-1.1.0.tgz", - "integrity": "sha512-F2Vm16DmhVJhVzDN1hPEH0kB5uHXZIEO7EC72b+RY4G0EQ/Yqj604e/MsSrYeew32LRjuQv9nn8hvNISpvHTJw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/metrics/-/metrics-1.1.1.tgz", + "integrity": "sha512-ZLHyjifmQE5+L0QiX/UPVSc9DQXdns3cMrI0Q9/6cQDntZpenc4+lcwOdHhD4LYlxeKBLHOvX3rhOhCMLpGEPw==", "requires": { - "@aws-lambda-powertools/commons": "^1.1.0" + "@aws-lambda-powertools/commons": "^1.1.1" } }, "@aws-lambda-powertools/tracer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/tracer/-/tracer-1.1.0.tgz", - "integrity": "sha512-2uym1Ten54ysBEJFSB+yAnkHYcPkntCthwp2I10EYGtifkgxvAKn340nxZtJMpCNLpToat0mMLLCEuAK0Y+Rzg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/tracer/-/tracer-1.1.1.tgz", + "integrity": "sha512-j3ZjozHxjLOLqCuObfuz5VdzoaOkVHVHzectVYtnimW8XEfyrV8wufp91F2noU9szMGtVVZaFcpilXVp8/b/MQ==", "requires": { - "@aws-lambda-powertools/commons": "^1.1.0", + "@aws-lambda-powertools/commons": "^1.1.1", "aws-xray-sdk-core": "^3.3.6" } }, diff --git a/examples/cdk/package.json b/examples/cdk/package.json index 299c6e7acc..6f24ff5b46 100644 --- a/examples/cdk/package.json +++ b/examples/cdk/package.json @@ -1,6 +1,6 @@ { "name": "cdk-app", - "version": "1.1.1", + "version": "1.2.0", "author": { "name": "Amazon Web Services", "url": "https://aws.amazon.com" @@ -32,9 +32,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@aws-lambda-powertools/logger": "^1.1.0", - "@aws-lambda-powertools/metrics": "^1.1.0", - "@aws-lambda-powertools/tracer": "^1.1.0", + "@aws-lambda-powertools/logger": "^1.1.1", + "@aws-lambda-powertools/metrics": "^1.1.1", + "@aws-lambda-powertools/tracer": "^1.1.1", "@aws-sdk/client-sts": "^3.53.0", "@middy/core": "^2.5.6", "@types/aws-lambda": "^8.10.86", diff --git a/examples/sam/CHANGELOG.md b/examples/sam/CHANGELOG.md index 2a90acaa04..c17d06e212 100644 --- a/examples/sam/CHANGELOG.md +++ b/examples/sam/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.2.0](https://github.com/awslabs/aws-lambda-powertools-typescript/compare/v1.1.1...v1.2.0) (2022-08-23) + +**Note:** Version bump only for package powertools-typescript-sam-example + + + + + ## [1.1.1](https://github.com/awslabs/aws-lambda-powertools-typescript/compare/v1.1.0...v1.1.1) (2022-08-18) **Note:** Version bump only for package powertools-typescript-sam-example diff --git a/examples/sam/package-lock.json b/examples/sam/package-lock.json index 1ad265a0cf..c2f9734190 100644 --- a/examples/sam/package-lock.json +++ b/examples/sam/package-lock.json @@ -1,17 +1,17 @@ { "name": "powertools-typescript-sam-example", - "version": "1.1.1", + "version": "1.2.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "powertools-typescript-sam-example", - "version": "1.1.1", + "version": "1.2.0", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/logger": "^1.1.0", - "@aws-lambda-powertools/metrics": "^1.1.0", - "@aws-lambda-powertools/tracer": "^1.1.0", + "@aws-lambda-powertools/logger": "^1.1.1", + "@aws-lambda-powertools/metrics": "^1.1.1", + "@aws-lambda-powertools/tracer": "^1.1.1", "aws-sdk": "^2.1122.0" }, "devDependencies": { @@ -40,35 +40,35 @@ } }, "node_modules/@aws-lambda-powertools/commons": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/commons/-/commons-1.1.0.tgz", - "integrity": "sha512-SHbdUH7S2keBJQbAgXENbu1bVemHfSPvNZBvgiK1yoT7WYffl8qey3amP6GAgZA2761bhy9XawI2apOqaGHWBA==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/commons/-/commons-1.1.1.tgz", + "integrity": "sha512-EUk+2Q7GNQwLYyCfV8m+yso3ELrRVCX8wbZdgl2i1XCUmoxskwEV/j4T8+jxMMms/f7k+rDM7Jwh4+6vmONieQ==" }, "node_modules/@aws-lambda-powertools/logger": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/logger/-/logger-1.1.0.tgz", - "integrity": "sha512-2iaeqrPuodZGxEt4Cbag8OGRsE2ujakNjb5laMneo3mNTpQhEKG4E5W266xeTe66xF4uR8v3rDyu9fIdpKHwFw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/logger/-/logger-1.1.1.tgz", + "integrity": "sha512-zr9dw3k9ZT1LDOmOQn0w7CWWzPyXhAn6DcOdq2WFdRIdne3YOG1qmF/jjTs5A2CGht8mN/z8MsWPDQAx89SWwQ==", "dependencies": { - "@aws-lambda-powertools/commons": "^1.1.0", + "@aws-lambda-powertools/commons": "^1.1.1", "lodash.clonedeep": "^4.5.0", "lodash.merge": "^4.6.2", "lodash.pickby": "^4.6.0" } }, "node_modules/@aws-lambda-powertools/metrics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/metrics/-/metrics-1.1.0.tgz", - "integrity": "sha512-F2Vm16DmhVJhVzDN1hPEH0kB5uHXZIEO7EC72b+RY4G0EQ/Yqj604e/MsSrYeew32LRjuQv9nn8hvNISpvHTJw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/metrics/-/metrics-1.1.1.tgz", + "integrity": "sha512-ZLHyjifmQE5+L0QiX/UPVSc9DQXdns3cMrI0Q9/6cQDntZpenc4+lcwOdHhD4LYlxeKBLHOvX3rhOhCMLpGEPw==", "dependencies": { - "@aws-lambda-powertools/commons": "^1.1.0" + "@aws-lambda-powertools/commons": "^1.1.1" } }, "node_modules/@aws-lambda-powertools/tracer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/tracer/-/tracer-1.1.0.tgz", - "integrity": "sha512-2uym1Ten54ysBEJFSB+yAnkHYcPkntCthwp2I10EYGtifkgxvAKn340nxZtJMpCNLpToat0mMLLCEuAK0Y+Rzg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/tracer/-/tracer-1.1.1.tgz", + "integrity": "sha512-j3ZjozHxjLOLqCuObfuz5VdzoaOkVHVHzectVYtnimW8XEfyrV8wufp91F2noU9szMGtVVZaFcpilXVp8/b/MQ==", "dependencies": { - "@aws-lambda-powertools/commons": "^1.1.0", + "@aws-lambda-powertools/commons": "^1.1.1", "aws-xray-sdk-core": "^3.3.6" } }, @@ -5419,35 +5419,35 @@ } }, "@aws-lambda-powertools/commons": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/commons/-/commons-1.1.0.tgz", - "integrity": "sha512-SHbdUH7S2keBJQbAgXENbu1bVemHfSPvNZBvgiK1yoT7WYffl8qey3amP6GAgZA2761bhy9XawI2apOqaGHWBA==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/commons/-/commons-1.1.1.tgz", + "integrity": "sha512-EUk+2Q7GNQwLYyCfV8m+yso3ELrRVCX8wbZdgl2i1XCUmoxskwEV/j4T8+jxMMms/f7k+rDM7Jwh4+6vmONieQ==" }, "@aws-lambda-powertools/logger": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/logger/-/logger-1.1.0.tgz", - "integrity": "sha512-2iaeqrPuodZGxEt4Cbag8OGRsE2ujakNjb5laMneo3mNTpQhEKG4E5W266xeTe66xF4uR8v3rDyu9fIdpKHwFw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/logger/-/logger-1.1.1.tgz", + "integrity": "sha512-zr9dw3k9ZT1LDOmOQn0w7CWWzPyXhAn6DcOdq2WFdRIdne3YOG1qmF/jjTs5A2CGht8mN/z8MsWPDQAx89SWwQ==", "requires": { - "@aws-lambda-powertools/commons": "^1.1.0", + "@aws-lambda-powertools/commons": "^1.1.1", "lodash.clonedeep": "^4.5.0", "lodash.merge": "^4.6.2", "lodash.pickby": "^4.6.0" } }, "@aws-lambda-powertools/metrics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/metrics/-/metrics-1.1.0.tgz", - "integrity": "sha512-F2Vm16DmhVJhVzDN1hPEH0kB5uHXZIEO7EC72b+RY4G0EQ/Yqj604e/MsSrYeew32LRjuQv9nn8hvNISpvHTJw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/metrics/-/metrics-1.1.1.tgz", + "integrity": "sha512-ZLHyjifmQE5+L0QiX/UPVSc9DQXdns3cMrI0Q9/6cQDntZpenc4+lcwOdHhD4LYlxeKBLHOvX3rhOhCMLpGEPw==", "requires": { - "@aws-lambda-powertools/commons": "^1.1.0" + "@aws-lambda-powertools/commons": "^1.1.1" } }, "@aws-lambda-powertools/tracer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/tracer/-/tracer-1.1.0.tgz", - "integrity": "sha512-2uym1Ten54ysBEJFSB+yAnkHYcPkntCthwp2I10EYGtifkgxvAKn340nxZtJMpCNLpToat0mMLLCEuAK0Y+Rzg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/tracer/-/tracer-1.1.1.tgz", + "integrity": "sha512-j3ZjozHxjLOLqCuObfuz5VdzoaOkVHVHzectVYtnimW8XEfyrV8wufp91F2noU9szMGtVVZaFcpilXVp8/b/MQ==", "requires": { - "@aws-lambda-powertools/commons": "^1.1.0", + "@aws-lambda-powertools/commons": "^1.1.1", "aws-xray-sdk-core": "^3.3.6" } }, diff --git a/examples/sam/package.json b/examples/sam/package.json index 016607496a..143bcbc3ca 100644 --- a/examples/sam/package.json +++ b/examples/sam/package.json @@ -1,6 +1,6 @@ { "name": "powertools-typescript-sam-example", - "version": "1.1.1", + "version": "1.2.0", "author": { "name": "Amazon Web Services", "url": "https://aws.amazon.com" @@ -28,9 +28,9 @@ "typescript": "^4.1.3" }, "dependencies": { - "@aws-lambda-powertools/logger": "^1.1.0", - "@aws-lambda-powertools/metrics": "^1.1.0", - "@aws-lambda-powertools/tracer": "^1.1.0", + "@aws-lambda-powertools/logger": "^1.1.1", + "@aws-lambda-powertools/metrics": "^1.1.1", + "@aws-lambda-powertools/tracer": "^1.1.1", "aws-sdk": "^2.1122.0" } } diff --git a/layer-publisher/CHANGELOG.md b/layer-publisher/CHANGELOG.md index 0c0edfc18e..497f775158 100644 --- a/layer-publisher/CHANGELOG.md +++ b/layer-publisher/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.2.0](https://github.com/awslabs/aws-lambda-powertools-typescript/compare/v1.1.1...v1.2.0) (2022-08-23) + +**Note:** Version bump only for package layer-publisher + + + + + ## [1.1.1](https://github.com/awslabs/aws-lambda-powertools-typescript/compare/v1.1.0...v1.1.1) (2022-08-18) **Note:** Version bump only for package layer-publisher diff --git a/layer-publisher/package-lock.json b/layer-publisher/package-lock.json index 765324d42d..f57d7cdf7e 100644 --- a/layer-publisher/package-lock.json +++ b/layer-publisher/package-lock.json @@ -1,6 +1,6 @@ { "name": "layer-publisher", - "version": "1.1.1", + "version": "1.2.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/layer-publisher/package.json b/layer-publisher/package.json index 9790b12ef9..274111d258 100644 --- a/layer-publisher/package.json +++ b/layer-publisher/package.json @@ -1,6 +1,6 @@ { "name": "layer-publisher", - "version": "1.1.1", + "version": "1.2.0", "bin": { "layer-publisher": "bin/layer-publisher.js" }, diff --git a/lerna.json b/lerna.json index 097ba065da..26391b9ea5 100644 --- a/lerna.json +++ b/lerna.json @@ -8,7 +8,7 @@ "examples/sam", "layer-publisher" ], - "version": "1.1.1", + "version": "1.2.0", "npmClient": "npm", "message": "chore(release): %s [skip ci]" } \ No newline at end of file diff --git a/packages/commons/CHANGELOG.md b/packages/commons/CHANGELOG.md index 79703a0cf9..cbe016e7fb 100644 --- a/packages/commons/CHANGELOG.md +++ b/packages/commons/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.2.0](https://github.com/awslabs/aws-lambda-powertools-typescript/compare/v1.1.1...v1.2.0) (2022-08-23) + +**Note:** Version bump only for package @aws-lambda-powertools/commons + + + + + ## [1.1.1](https://github.com/awslabs/aws-lambda-powertools-typescript/compare/v1.1.0...v1.1.1) (2022-08-18) **Note:** Version bump only for package @aws-lambda-powertools/commons diff --git a/packages/commons/package.json b/packages/commons/package.json index 3bfd5d70d1..3dfa5bdc5f 100644 --- a/packages/commons/package.json +++ b/packages/commons/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/commons", - "version": "1.1.1", + "version": "1.2.0", "description": "A shared utility package for AWS Lambda Powertools for TypeScript libraries", "author": { "name": "Amazon Web Services", diff --git a/packages/logger/CHANGELOG.md b/packages/logger/CHANGELOG.md index 7a64ba0288..2b6834ee3c 100644 --- a/packages/logger/CHANGELOG.md +++ b/packages/logger/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.2.0](https://github.com/awslabs/aws-lambda-powertools-typescript/compare/v1.1.1...v1.2.0) (2022-08-23) + +**Note:** Version bump only for package @aws-lambda-powertools/logger + + + + + ## [1.1.1](https://github.com/awslabs/aws-lambda-powertools-typescript/compare/v1.1.0...v1.1.1) (2022-08-18) diff --git a/packages/logger/package.json b/packages/logger/package.json index 6a09e65a52..4c8ed28a8f 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/logger", - "version": "1.1.1", + "version": "1.2.0", "description": "The logging package for the AWS Lambda Powertools for TypeScript library", "author": { "name": "Amazon Web Services", @@ -50,7 +50,7 @@ "url": "https://github.com/awslabs/aws-lambda-powertools-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^1.1.1", + "@aws-lambda-powertools/commons": "^1.2.0", "lodash.clonedeep": "^4.5.0", "lodash.merge": "^4.6.2", "lodash.pickby": "^4.6.0" diff --git a/packages/metrics/CHANGELOG.md b/packages/metrics/CHANGELOG.md index 34a4c5c27b..47da94cf71 100644 --- a/packages/metrics/CHANGELOG.md +++ b/packages/metrics/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.2.0](https://github.com/awslabs/aws-lambda-powertools-typescript/compare/v1.1.1...v1.2.0) (2022-08-23) + + +### Features + +* **metrics:** increase maximum dimensions to 29 ([#1072](https://github.com/awslabs/aws-lambda-powertools-typescript/issues/1072)) ([7b9a027](https://github.com/awslabs/aws-lambda-powertools-typescript/commit/7b9a0278ccf801a521cab3f74372a4748231fd11)) + + + + + ## [1.1.1](https://github.com/awslabs/aws-lambda-powertools-typescript/compare/v1.1.0...v1.1.1) (2022-08-18) **Note:** Version bump only for package @aws-lambda-powertools/metrics diff --git a/packages/metrics/package.json b/packages/metrics/package.json index 5dc3183e53..e23ca791f5 100644 --- a/packages/metrics/package.json +++ b/packages/metrics/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/metrics", - "version": "1.1.1", + "version": "1.2.0", "description": "The metrics package for the AWS Lambda Powertools for TypeScript library", "author": { "name": "Amazon Web Services", @@ -49,7 +49,7 @@ "url": "https://github.com/awslabs/aws-lambda-powertools-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^1.1.1" + "@aws-lambda-powertools/commons": "^1.2.0" }, "keywords": [ "aws", diff --git a/packages/tracer/CHANGELOG.md b/packages/tracer/CHANGELOG.md index e3a7a1716c..ad96f23ffa 100644 --- a/packages/tracer/CHANGELOG.md +++ b/packages/tracer/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.2.0](https://github.com/awslabs/aws-lambda-powertools-typescript/compare/v1.1.1...v1.2.0) (2022-08-23) + + +### Features + +* **tracer:** allow disabling result capture for decorators and middleware ([#1065](https://github.com/awslabs/aws-lambda-powertools-typescript/issues/1065)) ([c3b9a37](https://github.com/awslabs/aws-lambda-powertools-typescript/commit/c3b9a37b6d5885f1750da4f0b226a18734ff0c29)) + + + + + ## [1.1.1](https://github.com/awslabs/aws-lambda-powertools-typescript/compare/v1.1.0...v1.1.1) (2022-08-18) diff --git a/packages/tracer/package.json b/packages/tracer/package.json index 4fbf7a500c..6c5351bc0a 100644 --- a/packages/tracer/package.json +++ b/packages/tracer/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/tracer", - "version": "1.1.1", + "version": "1.2.0", "description": "The tracer package for the AWS Lambda Powertools for TypeScript library", "author": { "name": "Amazon Web Services", @@ -50,7 +50,7 @@ "url": "https://github.com/awslabs/aws-lambda-powertools-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^1.1.1", + "@aws-lambda-powertools/commons": "^1.2.0", "aws-xray-sdk-core": "^3.3.6" }, "keywords": [