diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index ce1871ae0e..6c8f8c8224 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -17,6 +17,6 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: 'Dependency Review' uses: actions/dependency-review-action@72eb03d02c7872a771aacd928f3123ac62ad6d3a # v4.3.3 diff --git a/.github/workflows/label_pr_on_title.yml b/.github/workflows/label_pr_on_title.yml index 07be22d68e..27ccdfe7be 100644 --- a/.github/workflows/label_pr_on_title.yml +++ b/.github/workflows/label_pr_on_title.yml @@ -49,7 +49,7 @@ jobs: pull-requests: write # label respective PR steps: - name: Checkout repository - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: "Label PR based on title" uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 env: diff --git a/.github/workflows/make-release.yml b/.github/workflows/make-release.yml index c8b52864d6..b4abf71760 100644 --- a/.github/workflows/make-release.yml +++ b/.github/workflows/make-release.yml @@ -45,7 +45,7 @@ jobs: RELEASE_VERSION: ${{ steps.set-release-version.outputs.RELEASE_VERSION }} steps: - name: Checkout code - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: ref: ${{ github.sha }} - name: Setup NodeJS @@ -75,7 +75,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: ref: ${{ github.sha }} - name: Git client setup diff --git a/.github/workflows/make-version.yml b/.github/workflows/make-version.yml index 081d11b81a..63fa25c911 100644 --- a/.github/workflows/make-version.yml +++ b/.github/workflows/make-version.yml @@ -18,7 +18,7 @@ jobs: RELEASE_VERSION: ${{ steps.set-release-version.outputs.RELEASE_VERSION }} steps: - name: Checkout code - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: ref: ${{ github.ref }} fetch-depth: 0 # fetch all history, commits and tags, lerna scans it to the last tag and looks at commits, we need all of it to determine the next version diff --git a/.github/workflows/on_merged_pr.yml b/.github/workflows/on_merged_pr.yml index 665af5e036..b93976ee7f 100644 --- a/.github/workflows/on_merged_pr.yml +++ b/.github/workflows/on_merged_pr.yml @@ -49,7 +49,7 @@ jobs: issues: write # label issue with pending-release if: needs.get_pr_details.outputs.prIsMerged == 'true' steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: "Label PR related issue for release" uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 env: diff --git a/.github/workflows/on_opened_pr.yml b/.github/workflows/on_opened_pr.yml index df12dfc11a..42bb7e513f 100644 --- a/.github/workflows/on_opened_pr.yml +++ b/.github/workflows/on_opened_pr.yml @@ -47,7 +47,7 @@ jobs: needs: get_pr_details runs-on: ubuntu-latest steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: "Ensure related issue is present" uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 env: @@ -66,7 +66,7 @@ jobs: permissions: pull-requests: write # label and comment on PR if missing acknowledge section (requirement) steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: "Ensure acknowledgement section is present" uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 env: diff --git a/.github/workflows/ossf_scorecard.yml b/.github/workflows/ossf_scorecard.yml index e2117e6868..7de8503e53 100644 --- a/.github/workflows/ossf_scorecard.yml +++ b/.github/workflows/ossf_scorecard.yml @@ -22,7 +22,7 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: persist-credentials: false @@ -43,6 +43,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@2e230e8fe0ad3a14a340ad0815ddb96d599d2aff # v3.25.8 + uses: github/codeql-action/upload-sarif@23acc5c183826b7a8a97bce3cecc52db901f8251 # v3.25.10 with: sarif_file: results.sarif diff --git a/.github/workflows/post-release.yml b/.github/workflows/post-release.yml index 2109cc9d76..8c63623845 100644 --- a/.github/workflows/post-release.yml +++ b/.github/workflows/post-release.yml @@ -26,7 +26,7 @@ jobs: env: RELEASE_VERSION: ${{ inputs.versionNumber }} steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Get release version run: | # The code below does the following: diff --git a/.github/workflows/publish_layer.yml b/.github/workflows/publish_layer.yml index 6a7ba11fda..f347002159 100644 --- a/.github/workflows/publish_layer.yml +++ b/.github/workflows/publish_layer.yml @@ -31,7 +31,7 @@ jobs: if: ${{ (github.event.workflow_run.conclusion == 'success') || (github.event_name == 'workflow_dispatch') }} steps: - name: checkout - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: ref: ${{ github.sha }} - name: Setup Node.js @@ -93,7 +93,7 @@ jobs: id-token: none steps: - name: Checkout repository # reusable workflows start clean, so we need to checkout again - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: ref: ${{ github.sha }} - name: Download CDK layer artifacts diff --git a/.github/workflows/record_pr.yml b/.github/workflows/record_pr.yml index 52f1f4d098..070cba0ec4 100644 --- a/.github/workflows/record_pr.yml +++ b/.github/workflows/record_pr.yml @@ -46,7 +46,7 @@ jobs: permissions: contents: read # NOTE: treat as untrusted location steps: - - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: "Extract PR details" uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: diff --git a/.github/workflows/reusable-run-linting-check-and-unit-tests.yml b/.github/workflows/reusable-run-linting-check-and-unit-tests.yml index 5d49001acb..20b761ac55 100644 --- a/.github/workflows/reusable-run-linting-check-and-unit-tests.yml +++ b/.github/workflows/reusable-run-linting-check-and-unit-tests.yml @@ -17,7 +17,7 @@ jobs: fail-fast: false steps: - name: Checkout code - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Setup NodeJS uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 with: @@ -44,7 +44,7 @@ jobs: working-directory: examples/${{ matrix.example }} steps: - name: Checkout code - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Setup NodeJS uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 with: @@ -62,7 +62,7 @@ jobs: NODE_ENV: dev steps: - name: Checkout code - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Setup NodeJS uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 with: @@ -80,7 +80,7 @@ jobs: NODE_ENV: dev steps: - name: Checkout code - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Setup NodeJS uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 with: @@ -96,7 +96,7 @@ jobs: NODE_ENV: dev steps: - name: Checkout code - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Setup NodeJS uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 with: diff --git a/.github/workflows/reusable_deploy_layer_stack.yml b/.github/workflows/reusable_deploy_layer_stack.yml index a8cb375783..67e2d13679 100644 --- a/.github/workflows/reusable_deploy_layer_stack.yml +++ b/.github/workflows/reusable_deploy_layer_stack.yml @@ -62,7 +62,7 @@ jobs: ] steps: - name: checkout - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: aws credentials uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 with: diff --git a/.github/workflows/reusable_export_pr_details.yml b/.github/workflows/reusable_export_pr_details.yml index 1bbbd6ba98..0f7b33e9c3 100644 --- a/.github/workflows/reusable_export_pr_details.yml +++ b/.github/workflows/reusable_export_pr_details.yml @@ -75,7 +75,7 @@ jobs: prLabels: ${{ steps.prLabels.outputs.prLabels }} steps: - name: Checkout repository # in case caller workflow doesn't checkout thus failing with file not found - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: "Download previously saved PR" uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 env: diff --git a/.github/workflows/reusable_publish_docs.yml b/.github/workflows/reusable_publish_docs.yml index 96f59124b9..026cd6a60e 100644 --- a/.github/workflows/reusable_publish_docs.yml +++ b/.github/workflows/reusable_publish_docs.yml @@ -50,7 +50,7 @@ jobs: id-token: write # trade JWT token for AWS credentials in AWS Docs account steps: - name: Checkout code - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Setup NodeJS uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 with: diff --git a/.github/workflows/run-e2e-tests.yml b/.github/workflows/run-e2e-tests.yml index 73c87b3d52..cfec183523 100644 --- a/.github/workflows/run-e2e-tests.yml +++ b/.github/workflows/run-e2e-tests.yml @@ -37,7 +37,7 @@ jobs: fail-fast: false steps: - name: Checkout Repo - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 # If we pass a PR Number when triggering the workflow we will retrieve the PR info and get its headSHA - name: Extract PR details id: extract_PR_details @@ -51,7 +51,7 @@ jobs: # we checkout the PR at that point in time - name: Checkout PR code if: ${{ inputs.prNumber != '' }} - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: ref: ${{ steps.extract_PR_details.outputs.headSHA }} - name: Setup NodeJS diff --git a/.github/workflows/secure-workflows.yml b/.github/workflows/secure-workflows.yml index 0544ceb12a..6d3f821aa0 100644 --- a/.github/workflows/secure-workflows.yml +++ b/.github/workflows/secure-workflows.yml @@ -30,8 +30,8 @@ jobs: contents: read # checkout code and subsequently GitHub action workflows steps: - name: Checkout code - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Ensure 3rd party workflows have SHA pinned - uses: zgosalvez/github-actions-ensure-sha-pinned-actions@76d1d8e0b075d7190b5d59b86da91c7bdbcc99b2 # v3.0.7 + uses: zgosalvez/github-actions-ensure-sha-pinned-actions@74606c30450304eee8660aae751818321754feb1 # v3.0.9 with: allowlist: slsa-framework/slsa-github-generator \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 90268f2979..587c710c63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,24 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.3.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.2.0...v2.3.0) (2024-06-27) + + +### Bug Fixes + +* **idempotency:** preserve scope of decorated class ([#2693](https://github.com/aws-powertools/powertools-lambda-typescript/issues/2693)) ([22ec1f0](https://github.com/aws-powertools/powertools-lambda-typescript/commit/22ec1f005ae334577a2ee878a454527ad16a56d9)) +* **logger:** reset log level after sampling refresh ([#2673](https://github.com/aws-powertools/powertools-lambda-typescript/issues/2673)) ([618faec](https://github.com/aws-powertools/powertools-lambda-typescript/commit/618faeca7a2fff1d8570bd46832da65129196220)) + + +### Features + +* **logger:** add `clearState()` method ([#2408](https://github.com/aws-powertools/powertools-lambda-typescript/issues/2408)) ([f55e2d0](https://github.com/aws-powertools/powertools-lambda-typescript/commit/f55e2d019f8693ca79753eb56ba951b0fd33101b)) +* **parser:** enhance API Gateway schemas ([#2665](https://github.com/aws-powertools/powertools-lambda-typescript/issues/2665)) ([b3bc1f0](https://github.com/aws-powertools/powertools-lambda-typescript/commit/b3bc1f0a173233fdcf50f2573949b17a312813b4)) + + + + + # [2.2.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.1...v2.2.0) (2024-06-13) diff --git a/docs/Dockerfile b/docs/Dockerfile index d2a920d73c..df5b96ddd2 100644 --- a/docs/Dockerfile +++ b/docs/Dockerfile @@ -1,5 +1,5 @@ # version 9.5.2 -FROM squidfunk/mkdocs-material@sha256:96abcbb1bb6d4d79a6a142fe88150b3862b2b297fe45e6656b154d978b1787eb +FROM squidfunk/mkdocs-material@sha256:257eca88da7f42242cd05e8cebf6d10ebd079edc207b089ad3f4f1ad107b0348 ADD requirements.txt /tmp/ RUN pip install --require-hashes -r /tmp/requirements.txt \ No newline at end of file diff --git a/docs/core/logger.md b/docs/core/logger.md index c9b95b8b25..d98c647996 100644 --- a/docs/core/logger.md +++ b/docs/core/logger.md @@ -181,93 +181,199 @@ When debugging in non-production environments, you can instruct Logger to log th Use `POWERTOOLS_LOGGER_LOG_EVENT` environment variable to enable or disable (`true`/`false`) this feature. -### Appending persistent additional log keys and values +### Appending additional keys -You can append additional persistent keys and values in the logs generated during a Lambda invocation using either mechanism: +You can append additional keys using either machanism: -* Via the Logger's `appendKeys` method, for all log items generated after calling this method -* Passing them in the Logger's constructor +* Add **extra keys** to a single log message by passing them to the log method directly +* Append **temporary keys** to all future log messages via the `appendKeys()` method until `resetKeys()` is called +* Set **Persistent keys** for the logger instance via the `persistentKeys` constructor option or the `appendPersistentKeys()` method -To remove the keys you added, you can use the `removeKeys` method. +#### Extra keys + +You can append additional data to a single log item by passing objects as additional parameters. + +* Pass a simple string for logging it with default key name `extra` +* Pass one or multiple objects containing arbitrary data to be logged. Each data object should be placed in an enclosing object as a single property value, you can name this property as you need: `{ myData: arbitraryObjectToLog }` +* If you already have an object containing a `message` key and an additional property, you can pass this object directly === "handler.ts" - ```typescript hl_lines="5-13 17-25 32" - --8<-- "examples/snippets/logger/appendKeys.ts" + ```typescript hl_lines="16-18 23-25 37" + --8<-- "examples/snippets/logger/extraData.ts" ``` === "Example CloudWatch Logs excerpt" - ```json hl_lines="7-12 20-25" + ```json hl_lines="7 15-21 29 37" { "level": "INFO", - "message": "This is an INFO log", + "message": "This is a log with an extra variable", "service": "serverlessAirline", - "timestamp": "2021-12-12T21:49:58.084Z", + "timestamp": "2021-12-12T22:06:17.463Z", "xray_trace_id": "abcdef123456abcdef123456abcdef123456", - "aws_account_id": "123456789012", - "aws_region": "eu-west-1", - "logger": { - "name": "@aws-lambda-powertools/logger", - "version": "0.0.1" + "data": { "foo": "bar" } + } + { + "level": "INFO", + "message": "This is a log with 3 extra objects", + "service": "serverlessAirline", + "timestamp": "2021-12-12T22:06:17.466Z", + "xray_trace_id": "abcdef123456abcdef123456abcdef123456", + "data": { "foo": "bar" }, + "correlationIds": { "myCustomCorrelationId": "foo-bar-baz" }, + "lambdaEvent": { + "exampleEventData": { + "eventValue": 42 + } } } { "level": "INFO", - "message": "This is another INFO log", + "message": "This is a log with additional string value", + "service": "serverlessAirline", + "timestamp": "2021-12-12T22:06:17.463Z", + "xray_trace_id": "abcdef123456abcdef123456abcdef123456", + "extra": "string value" + } + { + "level": "INFO", + "message": "This is a log message", + "service": "serverlessAirline", + "timestamp": "2021-12-12T22:06:17.463Z", + "xray_trace_id": "abcdef123456abcdef123456abcdef123456", + "additionalValue": 42 + } + ``` + +#### Temporary keys + +You can append additional keys to all future log messages by using the `appendKeys()` method. + +???+ tip "When is this useful?" + This is helpful to contextualize log messages emitted during a specific function. + +=== "handler.ts" + + ```typescript hl_lines="9-11" + --8<-- "examples/snippets/logger/appendAndRemoveKeys.ts" + ``` + + 1. You can also remove specific keys by calling the `removeKeys()` method. + +=== "Example CloudWatch Logs excerpt" + + ```json hl_lines="7" + { + "level": "INFO", + "message": "transaction processed", + "service": "serverlessAirline", + "timestamp": "2021-12-12T21:49:58.084Z", + "xray_trace_id": "abcdef123456abcdef123456abcdef123456", + "customerId": "123456789012" + } + { + "level": "INFO", + "message": "other business logic processed", "service": "serverlessAirline", "timestamp": "2021-12-12T21:49:58.088Z", + "xray_trace_id": "abcdef123456abcdef123456abcdef123456" + } + ``` + +#### Persistent keys + +You can persist keys across Lambda invocations by using the `persistentKeys` constructor option or the `appendPersistentKeys()` method. These keys will persist even if you call the [`resetKeys()` method](#resetting-keys). + +A common use case is to set keys about your environment or application version, so that you can easily filter logs in CloudWatch Logs. + +=== "As constructor options" + + ```typescript hl_lines="5-8" + --8<-- "examples/snippets/logger/persistentKeysConstructor.ts" + ``` + +=== "Via dynamic method" + + ```typescript hl_lines="13" + --8<-- "examples/snippets/logger/persistentKeys.ts" + ``` + +=== "Example CloudWatch Logs excerpt" + + ```json hl_lines="7-8" + { + "level": "INFO", + "message": "processing transaction", + "service": "serverlessAirline", + "timestamp": "2021-12-12T21:49:58.084Z", "xray_trace_id": "abcdef123456abcdef123456abcdef123456", - "aws_account_id": "123456789012", - "aws_region": "eu-west-1", - "logger": { - "name": "@aws-lambda-powertools/logger", - "version": "0.0.1" - } + "environment": "prod", + "version": "1.2.0", } ``` -!!! tip "Logger will automatically ignore any key with an `undefined` value" +### Removing additional keys + +You can remove additional keys from the logger instance at any time: + +* Remove temporary keys added via the `appendKeys()` method by using the `removeKeys()` method +* Remove persistent keys added via the `persistentKeys` constructor option or the `appendPersistentKeys()` method by using the `removePersistentKeys()` method + +=== "Remove temporary keys" + + ```typescript hl_lines="17" + --8<-- "examples/snippets/logger/removeKeys.ts" + ``` + +=== "Remove persistent keys" -#### Clearing all state + ```typescript hl_lines="19" + --8<-- "examples/snippets/logger/removePersistentKeys.ts" + ``` + +#### Resetting keys + +Logger is commonly initialized in the global scope. Due to [Lambda Execution Context](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtime-environment.html){target="_blank"} reuse, this means that custom keys can be persisted across invocations. + +Resetting the state allows you to clear all the temporary keys you have added. + +???+ tip "Tip: When is this useful?" + This is useful when you add multiple custom keys conditionally or when you use canonical or wide logs. -The Logger utility is commonly initialized in the global scope, outside the handler function. -When you attach persistent log attributes through the `persistentLogAttributes` constructor option or via the `appendKeys`, `addPersistentLogAttributes` methods, this data is attached to the Logger instance. +=== "Clearing state manually" -Due to the [Lambda Execution Context reuse](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-context.html), this means those persistent log attributes may be reused across invocations. -If you want to make sure that persistent attributes added **inside the handler function** code are not persisted across invocations, you can set the parameter `clearState` as `true` in the `injectLambdaContext` middleware or decorator. + ```typescript hl_lines="25" + --8<-- "examples/snippets/logger/resetKeys.ts" + ``` === "Middy Middleware" - ```typescript hl_lines="31" - --8<-- "examples/snippets/logger/clearStateMiddy.ts" + ```typescript hl_lines="24" + --8<-- "examples/snippets/logger/resetKeysMiddy.ts" ``` === "Decorator" - ```typescript hl_lines="16" - --8<-- "examples/snippets/logger/clearStateDecorator.ts" + ```typescript hl_lines="13" + --8<-- "examples/snippets/logger/resetKeysDecorator.ts" ``` 1. Binding your handler method allows your handler to access `this` within the class methods. -In each case, the printed log will look like this: - === "First invocation" - ```json hl_lines="2 4-7" + ```json hl_lines="2 4" { - "biz": "baz", + "environment": "prod", "cold_start": true, - "details": { - "special_key": "123456", - }, + "userId": "123456789012", "foo": "bar", "function_arn": "arn:aws:lambda:eu-west-1:123456789012:function:foo-bar-function", "function_memory_size": 128, "function_name": "foo-bar-function", "function_request_id": "abcdef123456abcdef123456", - "level": "DEBUG", - "message": "This is a DEBUG log with the user_id", + "level": "INFO", + "message": "WIDE", "service": "hello-world", "timestamp": "2021-12-12T22:32:54.670Z", "xray_trace_id": "1-5759e988-bd862e3fe1be46a994272793" @@ -277,77 +383,21 @@ In each case, the printed log will look like this: ```json hl_lines="2 4" { - "biz": "baz", + "environment": "prod", "cold_start": false, - "foo": "bar", + "userId": "210987654321", "function_arn": "arn:aws:lambda:eu-west-1:123456789012:function:foo-bar-function", "function_memory_size": 128, "function_name": "foo-bar-function", "function_request_id": "abcdef123456abcdef123456", - "level": "DEBUG", - "message": "This is a DEBUG log with the user_id", + "level": "INFO", + "message": "WIDE", "service": "hello-world", "timestamp": "2021-12-12T22:40:23.120Z", "xray_trace_id": "1-5759e988-bd862e3fe1be46a994272793" } ``` -### Appending additional data to a single log item - -You can append additional data to a single log item by passing objects as additional parameters. - -* Pass a simple string for logging it with default key name `extra` -* Pass one or multiple objects containing arbitrary data to be logged. Each data object should be placed in an enclosing object as a single property value, you can name this property as you need: `{ myData: arbitraryObjectToLog }` -* If you already have an object containing a `message` key and an additional property, you can pass this object directly - -=== "handler.ts" - - ```typescript hl_lines="16-18 23-25 37" - --8<-- "examples/snippets/logger/extraData.ts" - ``` -=== "Example CloudWatch Logs excerpt" - - ```json hl_lines="7 15-21 29 37" - { - "level": "INFO", - "message": "This is a log with an extra variable", - "service": "serverlessAirline", - "timestamp": "2021-12-12T22:06:17.463Z", - "xray_trace_id": "abcdef123456abcdef123456abcdef123456", - "data": { "foo": "bar" } - } - { - "level": "INFO", - "message": "This is a log with 3 extra objects", - "service": "serverlessAirline", - "timestamp": "2021-12-12T22:06:17.466Z", - "xray_trace_id": "abcdef123456abcdef123456abcdef123456", - "data": { "foo": "bar" }, - "correlationIds": { "myCustomCorrelationId": "foo-bar-baz" }, - "lambdaEvent": { - "exampleEventData": { - "eventValue": 42 - } - } - } - { - "level": "INFO", - "message": "This is a log with additional string value", - "service": "serverlessAirline", - "timestamp": "2021-12-12T22:06:17.463Z", - "xray_trace_id": "abcdef123456abcdef123456abcdef123456", - "extra": "string value" - } - { - "level": "INFO", - "message": "This is a log message", - "service": "serverlessAirline", - "timestamp": "2021-12-12T22:06:17.463Z", - "xray_trace_id": "abcdef123456abcdef123456abcdef123456", - "additionalValue": 42 - } - ``` - ### Logging errors You can log errors by using the `error` method and pass the error object as parameter. @@ -471,7 +521,7 @@ In the event you have set a log level in Powertools to a level that is lower tha ### Using multiple Logger instances across your code -The `createChild` method allows you to create a child instance of the Logger, which inherits all of the attributes from its parent. You have the option to override any of the settings and attributes from the parent logger, including [its settings](#utility-settings), any [persistent attributes](#appending-persistent-additional-log-keys-and-values), and [the log formatter](#custom-log-formatter-bring-your-own-formatter). +The `createChild` method allows you to create a child instance of the Logger, which inherits all of the attributes from its parent. You have the option to override any of the settings and attributes from the parent logger, including [its settings](#utility-settings), any [extra keys](#appending-additional-keys), and [the log formatter](#custom-log-formatter-bring-your-own-formatter). Once a child logger is created, the logger and its parent will act as separate instances of the Logger class, and as such any change to one won't be applied to the other. diff --git a/docs/index.md b/docs/index.md index edf8bc5706..4de1682658 100644 --- a/docs/index.md +++ b/docs/index.md @@ -69,7 +69,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa For the latter, make sure to replace `{region}` with your AWS region, e.g., `eu-west-1`. - __arn:aws:lambda:{region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6__{: .copyMe}:clipboard: + __arn:aws:lambda:{region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7__{: .copyMe}:clipboard: ???+ note "Code snippets for popular infrastructure as code frameworks" @@ -89,7 +89,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa const powertoolsLayer = LayerVersion.fromLayerVersionArn( this, 'PowertoolsLayer', - `arn:aws:lambda:${Stack.of(this).region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6` + `arn:aws:lambda:${Stack.of(this).region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7` ); new Function(this, 'Function', { @@ -126,7 +126,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa Type: AWS::Serverless::Function Properties: Layers: - - !Sub arn:aws:lambda:${AWS::Region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6 + - !Sub arn:aws:lambda:${AWS::Region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7 ``` If you use `esbuild` to bundle your code, make sure to exclude `@aws-lambda-powertools/*` and `@aws-sdk/*` from being bundled since the packages are already present the layer: @@ -155,7 +155,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa hello: handler: lambda_function.lambda_handler layers: - - arn:aws:lambda:${aws:region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6 + - arn:aws:lambda:${aws:region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7 ``` If you use `esbuild` to bundle your code, make sure to exclude `@aws-lambda-powertools/*` and `@aws-sdk/*` from being bundled since the packages are already present the layer: @@ -190,7 +190,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa role = ... handler = "index.handler" runtime = "nodejs20.x" - layers = ["arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6"] + layers = ["arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7"] source_code_hash = filebase64sha256("lambda_function_payload.zip") } ``` @@ -208,7 +208,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa const lambdaFunction = new aws.lambda.Function('function', { layers: [ - pulumi.interpolate`arn:aws:lambda:${aws.getRegionOutput().name}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6` + pulumi.interpolate`arn:aws:lambda:${aws.getRegionOutput().name}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7` ], code: new pulumi.asset.FileArchive('lambda_function_payload.zip'), tracingConfig: { @@ -232,7 +232,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa ? Do you want to configure advanced settings? Yes ... ? Do you want to enable Lambda layers for this function? Yes - ? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6 + ? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7 ❯ amplify push -y # Updating an existing function and add the layer @@ -242,7 +242,7 @@ You can use Powertools for AWS Lambda (TypeScript) by installing it with your fa - Name: ? Which setting do you want to update? Lambda layers configuration ? Do you want to enable Lambda layers for this function? Yes - ? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6 + ? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7 ? Do you want to edit the local lambda function now? No ``` @@ -255,33 +255,33 @@ You can use the Lambda Layer both with CommonJS and ESM (ECMAScript modules) for ??? note "Click to expand and copy any regional Lambda Layer ARN" | Region | Layer ARN | | ---------------- | ------------------------------------------------------------------------------------------------------------- | - | `us-east-1` | [arn:aws:lambda:us-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `us-east-2` | [arn:aws:lambda:us-east-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `us-west-1` | [arn:aws:lambda:us-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `us-west-2` | [arn:aws:lambda:us-west-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `ap-south-1` | [arn:aws:lambda:ap-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `ap-east-1` | [arn:aws:lambda:ap-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `ap-northeast-1` | [arn:aws:lambda:ap-northeast-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `ap-northeast-2` | [arn:aws:lambda:ap-northeast-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `ap-northeast-3` | [arn:aws:lambda:ap-northeast-3:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `ap-southeast-1` | [arn:aws:lambda:ap-southeast-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `ap-southeast-2` | [arn:aws:lambda:ap-southeast-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `ap-southeast-3` | [arn:aws:lambda:ap-southeast-3:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `ap-southeast-4` | [arn:aws:lambda:ap-southeast-4:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `eu-central-1` | [arn:aws:lambda:eu-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `eu-central-2` | [arn:aws:lambda:eu-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `eu-west-1` | [arn:aws:lambda:eu-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `eu-west-2` | [arn:aws:lambda:eu-west-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `eu-west-3` | [arn:aws:lambda:eu-west-3:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `eu-north-1` | [arn:aws:lambda:eu-north-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `eu-south-1` | [arn:aws:lambda:eu-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `eu-south-2` | [arn:aws:lambda:eu-south-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `ca-central-1` | [arn:aws:lambda:ca-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `ca-west-1` | [arn:aws:lambda:ca-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `sa-east-1` | [arn:aws:lambda:sa-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `af-south-1` | [arn:aws:lambda:af-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `me-south-1` | [arn:aws:lambda:me-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | - | `il-central-1` | [arn:aws:lambda:il-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6](#){: .copyMe}:clipboard: | + | `us-east-1` | [arn:aws:lambda:us-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `us-east-2` | [arn:aws:lambda:us-east-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `us-west-1` | [arn:aws:lambda:us-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `us-west-2` | [arn:aws:lambda:us-west-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `ap-south-1` | [arn:aws:lambda:ap-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `ap-east-1` | [arn:aws:lambda:ap-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `ap-northeast-1` | [arn:aws:lambda:ap-northeast-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `ap-northeast-2` | [arn:aws:lambda:ap-northeast-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `ap-northeast-3` | [arn:aws:lambda:ap-northeast-3:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `ap-southeast-1` | [arn:aws:lambda:ap-southeast-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `ap-southeast-2` | [arn:aws:lambda:ap-southeast-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `ap-southeast-3` | [arn:aws:lambda:ap-southeast-3:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `ap-southeast-4` | [arn:aws:lambda:ap-southeast-4:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `eu-central-1` | [arn:aws:lambda:eu-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `eu-central-2` | [arn:aws:lambda:eu-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `eu-west-1` | [arn:aws:lambda:eu-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `eu-west-2` | [arn:aws:lambda:eu-west-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `eu-west-3` | [arn:aws:lambda:eu-west-3:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `eu-north-1` | [arn:aws:lambda:eu-north-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `eu-south-1` | [arn:aws:lambda:eu-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `eu-south-2` | [arn:aws:lambda:eu-south-2:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `ca-central-1` | [arn:aws:lambda:ca-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `ca-west-1` | [arn:aws:lambda:ca-west-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `sa-east-1` | [arn:aws:lambda:sa-east-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `af-south-1` | [arn:aws:lambda:af-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `me-south-1` | [arn:aws:lambda:me-south-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | + | `il-central-1` | [arn:aws:lambda:il-central-1:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7](#){: .copyMe}:clipboard: | **Want to inspect the contents of the Layer?** @@ -290,7 +290,7 @@ The pre-signed URL to download this Lambda Layer will be within `Location` key i Change `{aws::region}` to your AWS region, e.g. `eu-west-1`, and run the following command: ```bash title="AWS CLI command to download Lambda Layer content" -aws lambda get-layer-version-by-arn --arn arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:6 --region {aws::region} +aws lambda get-layer-version-by-arn --arn arn:aws:lambda:{aws::region}:094274105915:layer:AWSLambdaPowertoolsTypeScriptV2:7 --region {aws::region} ``` ## Instrumentation diff --git a/docs/requirements.in b/docs/requirements.in index 76fe522df7..6df9fbb7fe 100644 --- a/docs/requirements.in +++ b/docs/requirements.in @@ -1,4 +1,4 @@ mike==1.1.2 -mkdocs-material==9.5.26 +mkdocs-material==9.5.27 mkdocs-git-revision-date-plugin==0.3.2 mkdocs-exclude==1.0.2 \ No newline at end of file diff --git a/docs/requirements.txt b/docs/requirements.txt index 9bd5f7fc00..e925a08307 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -235,9 +235,9 @@ mkdocs-get-deps==0.2.0 \ mkdocs-git-revision-date-plugin==0.3.2 \ --hash=sha256:2e67956cb01823dd2418e2833f3623dee8604cdf223bddd005fe36226a56f6ef # via -r requirements.in -mkdocs-material==9.5.26 \ - --hash=sha256:56aeb91d94cffa43b6296fa4fbf0eb7c840136e563eecfd12c2d9e92e50ba326 \ - --hash=sha256:5d01fb0aa1c7946a1e3ae8689aa2b11a030621ecb54894e35aabb74c21016312 +mkdocs-material==9.5.27 \ + --hash=sha256:a7d4a35f6d4a62b0c43a0cfe7e987da0980c13587b5bc3c26e690ad494427ec0 \ + --hash=sha256:af8cc263fafa98bb79e9e15a8c966204abf15164987569bd1175fd66a7705182 # via -r requirements.in mkdocs-material-extensions==1.3.1 \ --hash=sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443 \ @@ -433,9 +433,9 @@ smmap==5.0.1 \ --hash=sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62 \ --hash=sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da # via gitdb -urllib3==2.1.0 \ - --hash=sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3 \ - --hash=sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54 +urllib3==2.2.2 \ + --hash=sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472 \ + --hash=sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168 # via requests verspec==0.1.0 \ --hash=sha256:741877d5633cc9464c45a469ae2a31e801e6dbbaa85b9675d481cda100f11c31 \ diff --git a/docs/utilities/parser.md b/docs/utilities/parser.md index bc22b26932..3784c37376 100644 --- a/docs/utilities/parser.md +++ b/docs/utilities/parser.md @@ -64,7 +64,10 @@ Parser comes with the following built-in schemas: | -------------------------------------------- | ------------------------------------------------------------------------------------- | | **AlbSchema** | Lambda Event Source payload for Amazon Application Load Balancer | | **APIGatewayProxyEventSchema** | Lambda Event Source payload for Amazon API Gateway | +| **APIGatewayRequestAuthorizerEventSchema** | Lambda Event Source payload for Amazon API Gateway Request Authorizer | +| **APIGatewayTokenAuthorizerEventSchema** | Lambda Event Source payload for Amazon API Gateway Token Authorizer | | **APIGatewayProxyEventV2Schema** | Lambda Event Source payload for Amazon API Gateway v2 payload | +| **APIGatewayRequestAuthorizerEventV2Schema** | Lambda Event Source payload for Amazon API Gateway v2 Authorizer | | **CloudFormationCustomResourceCreateSchema** | Lambda Event Source payload for AWS CloudFormation `CREATE` operation | | **CloudFormationCustomResourceUpdateSchema** | Lambda Event Source payload for AWS CloudFormation `UPDATE` operation | | **CloudFormationCustomResourceDeleteSchema** | Lambda Event Source payload for AWS CloudFormation `DELETE` operation | diff --git a/examples/app/CHANGELOG.md b/examples/app/CHANGELOG.md index 4b744d3c17..2c760e962a 100644 --- a/examples/app/CHANGELOG.md +++ b/examples/app/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. +# [2.3.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.2.0...v2.3.0) (2024-06-27) + +**Note:** Version bump only for package powertools-sample-app + + + + + # [2.2.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.1...v2.2.0) (2024-06-13) **Note:** Version bump only for package powertools-sample-app diff --git a/examples/app/package.json b/examples/app/package.json index 2f3ec641ca..e6d8bdd948 100644 --- a/examples/app/package.json +++ b/examples/app/package.json @@ -1,6 +1,6 @@ { "name": "powertools-sample-app", - "version": "2.2.0", + "version": "2.3.0", "author": { "name": "Amazon Web Services", "url": "https://aws.amazon.com" @@ -32,36 +32,36 @@ "#errors": "./functions/commons/errors.js" }, "devDependencies": { - "@types/aws-lambda": "^8.10.138", + "@types/aws-lambda": "^8.10.140", "@types/jest": "^29.5.12", - "@types/node": "20.14.2", - "aws-cdk": "^2.145.0", - "aws-cdk-lib": "^2.145.0", + "@types/node": "20.14.9", + "aws-cdk": "^2.146.0", + "aws-cdk-lib": "^2.146.0", "constructs": "^10.3.0", "jest": "^29.7.0", "source-map-support": "^0.5.21", - "ts-jest": "^29.1.4", - "tsx": "^4.15.1", + "ts-jest": "^29.1.5", + "tsx": "^4.15.7", "typescript": "^5.4.5" }, "dependencies": { - "@aws-lambda-powertools/batch": "^2.2.0", - "@aws-lambda-powertools/idempotency": "^2.2.0", - "@aws-lambda-powertools/logger": "^2.2.0", - "@aws-lambda-powertools/metrics": "^2.2.0", - "@aws-lambda-powertools/parameters": "^2.2.0", - "@aws-lambda-powertools/tracer": "^2.2.0", - "@aws-sdk/client-ssm": "^3.596.0", - "@aws-sdk/lib-dynamodb": "^3.596.0", + "@aws-lambda-powertools/batch": "^2.3.0", + "@aws-lambda-powertools/idempotency": "^2.3.0", + "@aws-lambda-powertools/logger": "^2.3.0", + "@aws-lambda-powertools/metrics": "^2.3.0", + "@aws-lambda-powertools/parameters": "^2.3.0", + "@aws-lambda-powertools/tracer": "^2.3.0", + "@aws-sdk/client-ssm": "^3.603.0", + "@aws-sdk/lib-dynamodb": "^3.602.0", "@middy/core": "^4.7.0", - "@types/aws-lambda": "^8.10.138", + "@types/aws-lambda": "^8.10.140", "@types/jest": "^29.5.12", - "@types/node": "20.14.2", - "aws-cdk": "^2.145.0", + "@types/node": "20.14.9", + "aws-cdk": "^2.146.0", "constructs": "^10.3.0", - "esbuild": "^0.21.4", + "esbuild": "^0.21.5", "jest": "^29.7.0", - "ts-jest": "^29.1.4", + "ts-jest": "^29.1.5", "ts-node": "^10.9.2", "typescript": "^5.4.5" } diff --git a/examples/snippets/CHANGELOG.md b/examples/snippets/CHANGELOG.md index 7f23bcbffc..6696197860 100644 --- a/examples/snippets/CHANGELOG.md +++ b/examples/snippets/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. +# [2.3.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.2.0...v2.3.0) (2024-06-27) + +**Note:** Version bump only for package code-snippets + + + + + # [2.2.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.1...v2.2.0) (2024-06-13) diff --git a/examples/snippets/logger/appendAndRemoveKeys.ts b/examples/snippets/logger/appendAndRemoveKeys.ts new file mode 100644 index 0000000000..99605755e7 --- /dev/null +++ b/examples/snippets/logger/appendAndRemoveKeys.ts @@ -0,0 +1,30 @@ +import { Logger } from '@aws-lambda-powertools/logger'; + +const logger = new Logger({ + serviceName: 'serverlessAirline', +}); + +const processTransaction = async (customerId: string): Promise => { + try { + logger.appendKeys({ + customerId, + }); + + // ... your business logic + + logger.info('transaction processed'); + } finally { + logger.resetKeys(); // (1)! + } +}; + +export const handler = async ( + event: { customerId: string }, + _context: unknown +): Promise => { + await processTransaction(event.customerId); + + // .. other business logic + + logger.info('other business logic processed'); +}; diff --git a/examples/snippets/logger/appendKeys.ts b/examples/snippets/logger/appendKeys.ts deleted file mode 100644 index e99fc20cb2..0000000000 --- a/examples/snippets/logger/appendKeys.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Logger } from '@aws-lambda-powertools/logger'; - -// Add persistent log keys via the constructor -const logger = new Logger({ - persistentLogAttributes: { - aws_account_id: '123456789012', - aws_region: 'eu-west-1', - logger: { - name: '@aws-lambda-powertools/logger', - version: '0.0.1', - }, - extra_key: 'some-value', - }, -}); - -export const handler = async ( - _event: unknown, - _context: unknown -): Promise => { - // If you don't want to log the "extra_key" attribute in your logs, you can remove it - logger.removeKeys(['extra_key']); - - // This info log will print all extra custom attributes added above - // Extra attributes: logger object with name and version of the logger library, awsAccountId, awsRegion - logger.info('This is an INFO log'); - logger.info('This is another INFO log'); - - return { - foo: 'bar', - }; -}; diff --git a/examples/snippets/logger/clearStateDecorator.ts b/examples/snippets/logger/clearStateDecorator.ts deleted file mode 100644 index 0f4ec2b81f..0000000000 --- a/examples/snippets/logger/clearStateDecorator.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Logger } from '@aws-lambda-powertools/logger'; -import type { LambdaInterface } from '@aws-lambda-powertools/commons/types'; - -// Persistent attributes added outside the handler will be -// cached across invocations -const logger = new Logger({ - logLevel: 'DEBUG', - persistentLogAttributes: { - foo: 'bar', - biz: 'baz', - }, -}); - -class Lambda implements LambdaInterface { - // Enable the clear state flag - @logger.injectLambdaContext({ clearState: true }) - public async handler( - event: { specialKey: string }, - _context: unknown - ): Promise { - // Persistent attributes added inside the handler will NOT be cached - // across invocations - if (event['specialKey'] === '123456') { - logger.appendKeys({ - details: { specialKey: '123456' }, - }); - } - logger.debug('This is a DEBUG log'); - } -} - -const myFunction = new Lambda(); -export const handler = myFunction.handler.bind(myFunction); // (1) diff --git a/examples/snippets/logger/clearStateMiddy.ts b/examples/snippets/logger/clearStateMiddy.ts deleted file mode 100644 index 1c18e550a0..0000000000 --- a/examples/snippets/logger/clearStateMiddy.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Logger } from '@aws-lambda-powertools/logger'; -import { injectLambdaContext } from '@aws-lambda-powertools/logger/middleware'; -import middy from '@middy/core'; - -// Persistent attributes added outside the handler will be -// cached across invocations -const logger = new Logger({ - logLevel: 'DEBUG', - persistentLogAttributes: { - foo: 'bar', - biz: 'baz', - }, -}); - -const lambdaHandler = async ( - event: { specialKey: string }, - _context: unknown -): Promise => { - // Persistent attributes added inside the handler will NOT be cached - // across invocations - if (event['special_key'] === '123456') { - logger.appendKeys({ - details: { special_key: event['specialKey'] }, - }); - } - logger.debug('This is a DEBUG log'); -}; - -// Enable the clear state flag -export const handler = middy(lambdaHandler).use( - injectLambdaContext(logger, { clearState: true }) -); diff --git a/examples/snippets/logger/persistentKeys.ts b/examples/snippets/logger/persistentKeys.ts new file mode 100644 index 0000000000..9aedfe4dcd --- /dev/null +++ b/examples/snippets/logger/persistentKeys.ts @@ -0,0 +1,22 @@ +import { Logger } from '@aws-lambda-powertools/logger'; + +const logger = new Logger({ + serviceName: 'serverlessAirline', +}); + +declare const getRemoteConfig: (env: string) => { + environment: string; + version: string; +}; +const { environment, version } = getRemoteConfig('prod'); + +logger.appendPersistentKeys({ environment, version }); + +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { + logger.info('processing transaction'); + + // .. your business logic +}; diff --git a/examples/snippets/logger/persistentKeysConstructor.ts b/examples/snippets/logger/persistentKeysConstructor.ts new file mode 100644 index 0000000000..dc6d509bc3 --- /dev/null +++ b/examples/snippets/logger/persistentKeysConstructor.ts @@ -0,0 +1,18 @@ +import { Logger } from '@aws-lambda-powertools/logger'; + +const logger = new Logger({ + serviceName: 'serverlessAirline', + persistentKeys: { + environment: 'prod', + version: process.env.BUILD_VERSION, + }, +}); + +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { + logger.info('processing transaction'); + + // ... your business logic +}; diff --git a/examples/snippets/logger/removeKeys.ts b/examples/snippets/logger/removeKeys.ts new file mode 100644 index 0000000000..122181e5d0 --- /dev/null +++ b/examples/snippets/logger/removeKeys.ts @@ -0,0 +1,30 @@ +import { Logger } from '@aws-lambda-powertools/logger'; + +const logger = new Logger({ + serviceName: 'serverlessAirline', +}); + +const processTransaction = async (customerId: string): Promise => { + try { + logger.appendKeys({ + customerId, + }); + + // ... your business logic + + logger.info('transaction processed'); + } finally { + logger.removeKeys(['customerId']); + } +}; + +export const handler = async ( + event: { customerId: string }, + _context: unknown +): Promise => { + await processTransaction(event.customerId); + + // .. other business logic + + logger.info('other business logic processed'); +}; diff --git a/examples/snippets/logger/removePersistentKeys.ts b/examples/snippets/logger/removePersistentKeys.ts new file mode 100644 index 0000000000..f6cdb52051 --- /dev/null +++ b/examples/snippets/logger/removePersistentKeys.ts @@ -0,0 +1,24 @@ +import { Logger } from '@aws-lambda-powertools/logger'; + +const logger = new Logger({ + serviceName: 'serverlessAirline', + persistentKeys: { + foo: true, + }, +}); + +declare const getRemoteConfig: (env: string) => { + isFoo: boolean; +}; + +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { + const { isFoo } = getRemoteConfig('prod'); + if (isFoo) logger.removePersistentKeys(['foo']); + + logger.info('processing transaction'); + + // ... your business logic +}; diff --git a/examples/snippets/logger/resetKeys.ts b/examples/snippets/logger/resetKeys.ts new file mode 100644 index 0000000000..2c4c4fd09d --- /dev/null +++ b/examples/snippets/logger/resetKeys.ts @@ -0,0 +1,27 @@ +import { Logger } from '@aws-lambda-powertools/logger'; + +// Persistent attributes will be cached across invocations +const logger = new Logger({ + logLevel: 'info', + persistentKeys: { + environment: 'prod', + }, +}); + +// Enable the clear state flag +export const handler = async ( + event: { userId: string }, + _context: unknown +): Promise => { + try { + // This temporary key will be included in the log & cleared after the invocation + logger.appendKeys({ + details: { userId: event.userId }, + }); + + // ... your business logic + } finally { + logger.info('WIDE'); + logger.resetKeys(); + } +}; diff --git a/examples/snippets/logger/resetKeysDecorator.ts b/examples/snippets/logger/resetKeysDecorator.ts new file mode 100644 index 0000000000..4c4f702a94 --- /dev/null +++ b/examples/snippets/logger/resetKeysDecorator.ts @@ -0,0 +1,30 @@ +import { Logger } from '@aws-lambda-powertools/logger'; +import type { LambdaInterface } from '@aws-lambda-powertools/commons/types'; + +// Persistent attributes will be cached across invocations +const logger = new Logger({ + logLevel: 'info', + persistentKeys: { + environment: 'prod', + }, +}); + +class Lambda implements LambdaInterface { + @logger.injectLambdaContext({ resetKeys: true }) + public async handler( + event: { userId: string }, + _context: unknown + ): Promise { + // This temporary key will be included in the log & cleared after the invocation + logger.appendKeys({ + details: { userId: event.userId }, + }); + + // ... your business logic + + logger.info('WIDE'); + } +} + +const myFunction = new Lambda(); +export const handler = myFunction.handler.bind(myFunction); // (1)! diff --git a/examples/snippets/logger/resetKeysMiddy.ts b/examples/snippets/logger/resetKeysMiddy.ts new file mode 100644 index 0000000000..0601c47dca --- /dev/null +++ b/examples/snippets/logger/resetKeysMiddy.ts @@ -0,0 +1,24 @@ +import { Logger } from '@aws-lambda-powertools/logger'; +import { injectLambdaContext } from '@aws-lambda-powertools/logger/middleware'; +import middy from '@middy/core'; + +// Persistent attributes will be cached across invocations +const logger = new Logger({ + logLevel: 'info', + persistentKeys: { + environment: 'prod', + }, +}); + +export const handler = middy( + async (event: { userId: string }, _context: unknown): Promise => { + // This temporary key will be included in the log & cleared after the invocation + logger.appendKeys({ + details: { userId: event.userId }, + }); + + // ... your business logic + + logger.info('WIDE'); + } +).use(injectLambdaContext(logger, { resetKeys: true })); diff --git a/examples/snippets/package.json b/examples/snippets/package.json index 68a71ea171..d7db98c1ca 100644 --- a/examples/snippets/package.json +++ b/examples/snippets/package.json @@ -1,6 +1,6 @@ { "name": "code-snippets", - "version": "2.2.0", + "version": "2.3.0", "description": "A collection code snippets for the Powertools for AWS Lambda (TypeScript) docs", "author": { "name": "Amazon Web Services", @@ -29,24 +29,24 @@ }, "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript#readme", "devDependencies": { - "@aws-lambda-powertools/batch": "^2.2.0", - "@aws-lambda-powertools/idempotency": "^2.2.0", - "@aws-lambda-powertools/jmespath": "^2.2.0", - "@aws-lambda-powertools/logger": "^2.2.0", - "@aws-lambda-powertools/metrics": "^2.2.0", - "@aws-lambda-powertools/parameters": "^2.2.0", - "@aws-lambda-powertools/parser": "^2.2.0", - "@aws-lambda-powertools/tracer": "^2.2.0", - "@aws-sdk/client-appconfigdata": "^3.596.0", - "@aws-sdk/client-dynamodb": "^3.596.0", - "@aws-sdk/client-secrets-manager": "^3.596.0", - "@aws-sdk/client-ssm": "^3.596.0", - "@aws-sdk/util-dynamodb": "^3.596.0", + "@aws-lambda-powertools/batch": "^2.3.0", + "@aws-lambda-powertools/idempotency": "^2.3.0", + "@aws-lambda-powertools/jmespath": "^2.3.0", + "@aws-lambda-powertools/logger": "^2.3.0", + "@aws-lambda-powertools/metrics": "^2.3.0", + "@aws-lambda-powertools/parameters": "^2.3.0", + "@aws-lambda-powertools/parser": "^2.3.0", + "@aws-lambda-powertools/tracer": "^2.3.0", + "@aws-sdk/client-appconfigdata": "^3.600.0", + "@aws-sdk/client-dynamodb": "^3.602.0", + "@aws-sdk/client-secrets-manager": "^3.600.0", + "@aws-sdk/client-ssm": "^3.603.0", + "@aws-sdk/util-dynamodb": "^3.602.0", "@middy/core": "^4.7.0", - "aws-sdk": "^2.1639.0", + "aws-sdk": "^2.1648.0", "aws-sdk-client-mock": "^4.0.1", "aws-sdk-client-mock-jest": "^4.0.1", - "hashi-vault-js": "^0.4.14", + "hashi-vault-js": "^0.4.15", "zod": "^3.23.8" } } diff --git a/layers/CHANGELOG.md b/layers/CHANGELOG.md index a8ab2d500d..e973077b34 100644 --- a/layers/CHANGELOG.md +++ b/layers/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. +# [2.3.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.2.0...v2.3.0) (2024-06-27) + +**Note:** Version bump only for package layers + + + + + # [2.2.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.1...v2.2.0) (2024-06-13) **Note:** Version bump only for package layers diff --git a/layers/package.json b/layers/package.json index 4ad1b72c77..591555bd33 100644 --- a/layers/package.json +++ b/layers/package.json @@ -1,6 +1,6 @@ { "name": "layers", - "version": "2.2.0", + "version": "2.3.0", "bin": { "layer": "bin/layers.js" }, @@ -36,8 +36,8 @@ "source-map-support": "^0.5.21" }, "dependencies": { - "aws-cdk": "^2.145.0", - "aws-cdk-lib": "^2.145.0", - "esbuild": "^0.21.4" + "aws-cdk": "^2.146.0", + "aws-cdk-lib": "^2.146.0", + "esbuild": "^0.21.5" } } diff --git a/lerna.json b/lerna.json index 2a8e815d08..7e840235b7 100644 --- a/lerna.json +++ b/lerna.json @@ -14,7 +14,7 @@ "layers", "examples/snippets" ], - "version": "2.2.0", + "version": "2.3.0", "npmClient": "npm", "message": "chore(release): %s [skip ci]" } diff --git a/package-lock.json b/package-lock.json index e31c81892e..92968ce606 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,9 +25,9 @@ ], "devDependencies": { "@middy/core": "^4.7.0", - "@types/aws-lambda": "^8.10.138", + "@types/aws-lambda": "^8.10.140", "@types/jest": "^29.5.12", - "@types/node": "^20.14.2", + "@types/node": "^20.14.9", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", "eslint": "^8.57.0", @@ -40,13 +40,14 @@ "jest": "^29.7.0", "jest-runner-groups": "^2.2.0", "lerna": "8.1.2", - "lint-staged": "^15.2.5", + "lint-staged": "^15.2.7", "markdownlint-cli2": "^0.13.0", "prettier": "^3.3.2", - "ts-jest": "^29.1.4", + "ts-jest": "^29.1.5", "ts-node": "^10.9.2", "typedoc": "^0.25.13", - "typedoc-plugin-missing-exports": "^2.2.0", + "typedoc-plugin-missing-exports": "^2.3.0", + "typedoc-plugin-zod": "^1.1.2", "typescript": "^5.4.5" }, "engines": { @@ -55,76 +56,76 @@ }, "examples/app": { "name": "powertools-sample-app", - "version": "2.2.0", + "version": "2.3.0", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/batch": "^2.2.0", - "@aws-lambda-powertools/idempotency": "^2.2.0", - "@aws-lambda-powertools/logger": "^2.2.0", - "@aws-lambda-powertools/metrics": "^2.2.0", - "@aws-lambda-powertools/parameters": "^2.2.0", - "@aws-lambda-powertools/tracer": "^2.2.0", - "@aws-sdk/client-ssm": "^3.596.0", - "@aws-sdk/lib-dynamodb": "^3.596.0", + "@aws-lambda-powertools/batch": "^2.3.0", + "@aws-lambda-powertools/idempotency": "^2.3.0", + "@aws-lambda-powertools/logger": "^2.3.0", + "@aws-lambda-powertools/metrics": "^2.3.0", + "@aws-lambda-powertools/parameters": "^2.3.0", + "@aws-lambda-powertools/tracer": "^2.3.0", + "@aws-sdk/client-ssm": "^3.603.0", + "@aws-sdk/lib-dynamodb": "^3.602.0", "@middy/core": "^4.7.0", - "@types/aws-lambda": "^8.10.138", + "@types/aws-lambda": "^8.10.140", "@types/jest": "^29.5.12", - "@types/node": "20.14.2", - "aws-cdk": "^2.145.0", + "@types/node": "20.14.9", + "aws-cdk": "^2.146.0", "constructs": "^10.3.0", - "esbuild": "^0.21.4", + "esbuild": "^0.21.5", "jest": "^29.7.0", - "ts-jest": "^29.1.4", + "ts-jest": "^29.1.5", "ts-node": "^10.9.2", "typescript": "^5.4.5" }, "devDependencies": { - "@types/aws-lambda": "^8.10.138", + "@types/aws-lambda": "^8.10.140", "@types/jest": "^29.5.12", - "@types/node": "20.14.2", - "aws-cdk": "^2.145.0", - "aws-cdk-lib": "^2.145.0", + "@types/node": "20.14.9", + "aws-cdk": "^2.146.0", + "aws-cdk-lib": "^2.146.0", "constructs": "^10.3.0", "jest": "^29.7.0", "source-map-support": "^0.5.21", - "ts-jest": "^29.1.4", - "tsx": "^4.15.1", + "ts-jest": "^29.1.5", + "tsx": "^4.15.7", "typescript": "^5.4.5" } }, "examples/snippets": { "name": "code-snippets", - "version": "2.2.0", + "version": "2.3.0", "license": "MIT-0", "devDependencies": { - "@aws-lambda-powertools/batch": "^2.2.0", - "@aws-lambda-powertools/idempotency": "^2.2.0", - "@aws-lambda-powertools/jmespath": "^2.2.0", - "@aws-lambda-powertools/logger": "^2.2.0", - "@aws-lambda-powertools/metrics": "^2.2.0", - "@aws-lambda-powertools/parameters": "^2.2.0", - "@aws-lambda-powertools/parser": "^2.2.0", - "@aws-lambda-powertools/tracer": "^2.2.0", - "@aws-sdk/client-appconfigdata": "^3.596.0", - "@aws-sdk/client-dynamodb": "^3.596.0", - "@aws-sdk/client-secrets-manager": "^3.596.0", - "@aws-sdk/client-ssm": "^3.596.0", - "@aws-sdk/util-dynamodb": "^3.596.0", + "@aws-lambda-powertools/batch": "^2.3.0", + "@aws-lambda-powertools/idempotency": "^2.3.0", + "@aws-lambda-powertools/jmespath": "^2.3.0", + "@aws-lambda-powertools/logger": "^2.3.0", + "@aws-lambda-powertools/metrics": "^2.3.0", + "@aws-lambda-powertools/parameters": "^2.3.0", + "@aws-lambda-powertools/parser": "^2.3.0", + "@aws-lambda-powertools/tracer": "^2.3.0", + "@aws-sdk/client-appconfigdata": "^3.600.0", + "@aws-sdk/client-dynamodb": "^3.602.0", + "@aws-sdk/client-secrets-manager": "^3.600.0", + "@aws-sdk/client-ssm": "^3.603.0", + "@aws-sdk/util-dynamodb": "^3.602.0", "@middy/core": "^4.7.0", - "aws-sdk": "^2.1639.0", + "aws-sdk": "^2.1648.0", "aws-sdk-client-mock": "^4.0.1", "aws-sdk-client-mock-jest": "^4.0.1", - "hashi-vault-js": "^0.4.14", + "hashi-vault-js": "^0.4.15", "zod": "^3.23.8" } }, "layers": { - "version": "2.2.0", + "version": "2.3.0", "license": "MIT-0", "dependencies": { - "aws-cdk": "^2.145.0", - "aws-cdk-lib": "^2.145.0", - "esbuild": "^0.21.4" + "aws-cdk": "^2.146.0", + "aws-cdk-lib": "^2.146.0", + "esbuild": "^0.21.5" }, "bin": { "layer": "bin/layers.js" @@ -184,95 +185,132 @@ } }, "node_modules/@aws-crypto/crc32": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", "dependencies": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-crypto/crc32/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/ie11-detection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "dependencies": { - "tslib": "^1.11.1" + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } }, "node_modules/@aws-crypto/sha256-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", "dependencies": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "dependencies": { - "tslib": "^1.11.1" + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", "dependencies": { "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } }, "node_modules/@aws-lambda-powertools/batch": { "resolved": "packages/batch", @@ -315,100 +353,51 @@ "link": true }, "node_modules/@aws-sdk/client-appconfigdata": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-appconfigdata/-/client-appconfigdata-3.596.0.tgz", - "integrity": "sha512-hZ11qfF6j2g6HnTQfLvNjK6uPH+uD+brjS7mS4zPdm0B/jh9s+OuI6zyXLOg3ZJwM6mpbZQjrEcegbhdOxgk6A==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.596.0", - "@aws-sdk/client-sts": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-stream": "^3.0.1", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-appconfigdata/node_modules/@aws-sdk/client-sso": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.592.0.tgz", - "integrity": "sha512-w+SuW47jQqvOC7fonyjFjsOh3yjqJ+VpWdVrmrl0E/KryBE7ho/Wn991Buf/EiHHeJikoWgHsAIPkBH29+ntdA==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-appconfigdata/-/client-appconfigdata-3.600.0.tgz", + "integrity": "sha512-KgYu8ILT2apjIUpqg3iTzfLU4QWfZLcZoNXgsz+kbGaG1YPpAMkSqNDkX1Ex8Yz4A5P6kVVQwGJ8P4+dnmGj9A==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.600.0", + "@aws-sdk/client-sts": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-stream": "^3.0.2", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -417,49 +406,49 @@ } }, "node_modules/@aws-sdk/client-appconfigdata/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.596.0.tgz", - "integrity": "sha512-KnTWtKzO0N+rMdIrVwbewFp4FAvVWBV/ekCAh5w7EN+uAvBHxMoFElE2RwlcRF/gH1/F715OspPMvOxPom6bMA==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.600.0.tgz", + "integrity": "sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sts": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -468,49 +457,49 @@ } }, "node_modules/@aws-sdk/client-appconfigdata/node_modules/@aws-sdk/client-sts": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.596.0.tgz", - "integrity": "sha512-37+WQDjgmqS/YXj3vPzIVIrbXaFcZ1WXk715AMGIPBZn9Y2/wr2bmSTpX7bsMyn0G8+LxmoIxFcG7n1Gu0nvLg==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.600.0.tgz", + "integrity": "sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -518,104 +507,23 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-appconfigdata/node_modules/@aws-sdk/core": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.592.0.tgz", - "integrity": "sha512-gLPMXR/HXDP+9gXAt58t7gaMTvRts9i6Q7NMISpkGF54wehskl5WGrbdtHJFylrlJ5BQo3XVY6i661o+EuR1wg==", - "dev": true, - "dependencies": { - "@smithy/core": "^2.2.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/signature-v4": "^3.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "fast-xml-parser": "4.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-appconfigdata/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.596.0.tgz", - "integrity": "sha512-nnmvEsz1KJgRmfSZJPWuzbxPRXu8Y+/78Ifa1jY3fQKSKdEJfXMDsjPljJvMDBl4dZ8pf5Hwx+S/ONnMEDwYEA==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/util-stream": "^3.0.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-appconfigdata/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.596.0.tgz", - "integrity": "sha512-c7PLtd7GbnOVAc5sk3sVlHxLvEsM8RF96rsBGlRo4AVpil/lXLKyNv9VarS4w/ZZZoRbJRyZ+m92PjNcLvpTDQ==", - "dev": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "3.587.0", - "@aws-sdk/credential-provider-http": "3.596.0", - "@aws-sdk/credential-provider-process": "3.587.0", - "@aws-sdk/credential-provider-sso": "3.592.0", - "@aws-sdk/credential-provider-web-identity": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.596.0" - } - }, "node_modules/@aws-sdk/client-appconfigdata/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.596.0.tgz", - "integrity": "sha512-F4MLyXpQyie1AnJS9n7TIRL0aF7YH8tKMIJXDsM5OXpSZi2en+yR6SzsxvHf5dwS2Ga8LUdEJyiyS2NoebaJGA==", - "dev": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "3.587.0", - "@aws-sdk/credential-provider-http": "3.596.0", - "@aws-sdk/credential-provider-ini": "3.596.0", - "@aws-sdk/credential-provider-process": "3.587.0", - "@aws-sdk/credential-provider-sso": "3.592.0", - "@aws-sdk/credential-provider-web-identity": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-appconfigdata/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.592.0.tgz", - "integrity": "sha512-fYFzAdDHKHvhtufPPtrLdSv8lO6GuW3em6n3erM5uFdpGytNpjXvr3XGokIsuXcNkETAY/Xihg+G9ksNE8WJxQ==", - "dev": true, - "dependencies": { - "@aws-sdk/client-sso": "3.592.0", - "@aws-sdk/token-providers": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.600.0.tgz", + "integrity": "sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw==", + "dev": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.598.0", + "@aws-sdk/credential-provider-http": "3.598.0", + "@aws-sdk/credential-provider-ini": "3.598.0", + "@aws-sdk/credential-provider-process": "3.598.0", + "@aws-sdk/credential-provider-sso": "3.598.0", + "@aws-sdk/credential-provider-web-identity": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/credential-provider-imds": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -623,102 +531,53 @@ } }, "node_modules/@aws-sdk/client-cloudwatch": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.596.0.tgz", - "integrity": "sha512-qR8gY/yCqfUkgaHtdLu8MCDQnQRIfMX+3CeS1ikEyW5abzK4uSYr91yyTdsy1Xn/gvmuqOX6ZIdRXHG3pKu3QA==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.596.0", - "@aws-sdk/client-sts": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-compression": "^3.0.1", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-cloudwatch/node_modules/@aws-sdk/client-sso": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.592.0.tgz", - "integrity": "sha512-w+SuW47jQqvOC7fonyjFjsOh3yjqJ+VpWdVrmrl0E/KryBE7ho/Wn991Buf/EiHHeJikoWgHsAIPkBH29+ntdA==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.600.0.tgz", + "integrity": "sha512-1+EOoKyqQGKyYvqXVIqtPtOE1df7XDYazdZOFdb7DqX69YMXovRTlFzz/+auh7fccsGVIkRdk1e+rJ2TFeMEBw==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.600.0", + "@aws-sdk/client-sts": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-compression": "^3.0.2", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.0.1", "tslib": "^2.6.2" }, "engines": { @@ -726,49 +585,49 @@ } }, "node_modules/@aws-sdk/client-cloudwatch/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.596.0.tgz", - "integrity": "sha512-KnTWtKzO0N+rMdIrVwbewFp4FAvVWBV/ekCAh5w7EN+uAvBHxMoFElE2RwlcRF/gH1/F715OspPMvOxPom6bMA==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.600.0.tgz", + "integrity": "sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sts": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -777,49 +636,49 @@ } }, "node_modules/@aws-sdk/client-cloudwatch/node_modules/@aws-sdk/client-sts": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.596.0.tgz", - "integrity": "sha512-37+WQDjgmqS/YXj3vPzIVIrbXaFcZ1WXk715AMGIPBZn9Y2/wr2bmSTpX7bsMyn0G8+LxmoIxFcG7n1Gu0nvLg==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.600.0.tgz", + "integrity": "sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -827,104 +686,23 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cloudwatch/node_modules/@aws-sdk/core": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.592.0.tgz", - "integrity": "sha512-gLPMXR/HXDP+9gXAt58t7gaMTvRts9i6Q7NMISpkGF54wehskl5WGrbdtHJFylrlJ5BQo3XVY6i661o+EuR1wg==", - "dev": true, - "dependencies": { - "@smithy/core": "^2.2.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/signature-v4": "^3.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "fast-xml-parser": "4.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-cloudwatch/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.596.0.tgz", - "integrity": "sha512-nnmvEsz1KJgRmfSZJPWuzbxPRXu8Y+/78Ifa1jY3fQKSKdEJfXMDsjPljJvMDBl4dZ8pf5Hwx+S/ONnMEDwYEA==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/util-stream": "^3.0.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-cloudwatch/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.596.0.tgz", - "integrity": "sha512-c7PLtd7GbnOVAc5sk3sVlHxLvEsM8RF96rsBGlRo4AVpil/lXLKyNv9VarS4w/ZZZoRbJRyZ+m92PjNcLvpTDQ==", - "dev": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "3.587.0", - "@aws-sdk/credential-provider-http": "3.596.0", - "@aws-sdk/credential-provider-process": "3.587.0", - "@aws-sdk/credential-provider-sso": "3.592.0", - "@aws-sdk/credential-provider-web-identity": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.596.0" - } - }, "node_modules/@aws-sdk/client-cloudwatch/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.596.0.tgz", - "integrity": "sha512-F4MLyXpQyie1AnJS9n7TIRL0aF7YH8tKMIJXDsM5OXpSZi2en+yR6SzsxvHf5dwS2Ga8LUdEJyiyS2NoebaJGA==", - "dev": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "3.587.0", - "@aws-sdk/credential-provider-http": "3.596.0", - "@aws-sdk/credential-provider-ini": "3.596.0", - "@aws-sdk/credential-provider-process": "3.587.0", - "@aws-sdk/credential-provider-sso": "3.592.0", - "@aws-sdk/credential-provider-web-identity": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-cloudwatch/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.592.0.tgz", - "integrity": "sha512-fYFzAdDHKHvhtufPPtrLdSv8lO6GuW3em6n3erM5uFdpGytNpjXvr3XGokIsuXcNkETAY/Xihg+G9ksNE8WJxQ==", - "dev": true, - "dependencies": { - "@aws-sdk/client-sso": "3.592.0", - "@aws-sdk/token-providers": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.600.0.tgz", + "integrity": "sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw==", + "dev": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.598.0", + "@aws-sdk/credential-provider-http": "3.598.0", + "@aws-sdk/credential-provider-ini": "3.598.0", + "@aws-sdk/credential-provider-process": "3.598.0", + "@aws-sdk/credential-provider-sso": "3.598.0", + "@aws-sdk/credential-provider-web-identity": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/credential-provider-imds": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -932,52 +710,52 @@ } }, "node_modules/@aws-sdk/client-dynamodb": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.596.0.tgz", - "integrity": "sha512-i0TB/UuZJ/+yCIDsYpVc874IypGxksU81bckNK96j4cM9BO9mitdt0gxickqnIqTwsZIZBs7RW6ANSxDi7yVxA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.596.0", - "@aws-sdk/client-sts": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-endpoint-discovery": "3.587.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "version": "3.602.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.602.0.tgz", + "integrity": "sha512-q7lH7YD9KvHLF3tyAG1UqaPv4a6KiHLunqKYh8vt3d1WJK7t4wzE97Vf19MfNpza1MuZ0OF/SK8Kl69vEMrtOA==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.600.0", + "@aws-sdk/client-sts": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-endpoint-discovery": "3.598.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.0.0", + "@smithy/util-waiter": "^3.0.1", "tslib": "^2.6.2", "uuid": "^9.0.1" }, @@ -985,97 +763,49 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/client-sso": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.592.0.tgz", - "integrity": "sha512-w+SuW47jQqvOC7fonyjFjsOh3yjqJ+VpWdVrmrl0E/KryBE7ho/Wn991Buf/EiHHeJikoWgHsAIPkBH29+ntdA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.596.0.tgz", - "integrity": "sha512-KnTWtKzO0N+rMdIrVwbewFp4FAvVWBV/ekCAh5w7EN+uAvBHxMoFElE2RwlcRF/gH1/F715OspPMvOxPom6bMA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.600.0.tgz", + "integrity": "sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sts": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -1084,909 +814,176 @@ } }, "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/client-sts": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.596.0.tgz", - "integrity": "sha512-37+WQDjgmqS/YXj3vPzIVIrbXaFcZ1WXk715AMGIPBZn9Y2/wr2bmSTpX7bsMyn0G8+LxmoIxFcG7n1Gu0nvLg==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/core": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.592.0.tgz", - "integrity": "sha512-gLPMXR/HXDP+9gXAt58t7gaMTvRts9i6Q7NMISpkGF54wehskl5WGrbdtHJFylrlJ5BQo3XVY6i661o+EuR1wg==", - "dependencies": { - "@smithy/core": "^2.2.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/signature-v4": "^3.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "fast-xml-parser": "4.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.596.0.tgz", - "integrity": "sha512-nnmvEsz1KJgRmfSZJPWuzbxPRXu8Y+/78Ifa1jY3fQKSKdEJfXMDsjPljJvMDBl4dZ8pf5Hwx+S/ONnMEDwYEA==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/util-stream": "^3.0.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.596.0.tgz", - "integrity": "sha512-c7PLtd7GbnOVAc5sk3sVlHxLvEsM8RF96rsBGlRo4AVpil/lXLKyNv9VarS4w/ZZZoRbJRyZ+m92PjNcLvpTDQ==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.587.0", - "@aws-sdk/credential-provider-http": "3.596.0", - "@aws-sdk/credential-provider-process": "3.587.0", - "@aws-sdk/credential-provider-sso": "3.592.0", - "@aws-sdk/credential-provider-web-identity": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.596.0" - } - }, - "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.596.0.tgz", - "integrity": "sha512-F4MLyXpQyie1AnJS9n7TIRL0aF7YH8tKMIJXDsM5OXpSZi2en+yR6SzsxvHf5dwS2Ga8LUdEJyiyS2NoebaJGA==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.587.0", - "@aws-sdk/credential-provider-http": "3.596.0", - "@aws-sdk/credential-provider-ini": "3.596.0", - "@aws-sdk/credential-provider-process": "3.587.0", - "@aws-sdk/credential-provider-sso": "3.592.0", - "@aws-sdk/credential-provider-web-identity": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.592.0.tgz", - "integrity": "sha512-fYFzAdDHKHvhtufPPtrLdSv8lO6GuW3em6n3erM5uFdpGytNpjXvr3XGokIsuXcNkETAY/Xihg+G9ksNE8WJxQ==", - "dependencies": { - "@aws-sdk/client-sso": "3.592.0", - "@aws-sdk/token-providers": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-lambda": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.596.0.tgz", - "integrity": "sha512-tuC/Otp52knSpdMwCg1SfSp+KZnAHZwYB96CoCEQxZ6rerNv5NFiJ+VwOKt0bAXIFdaj0RvIoZ33GsguFysl3g==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.596.0", - "@aws-sdk/client-sts": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/eventstream-serde-browser": "^3.0.0", - "@smithy/eventstream-serde-config-resolver": "^3.0.0", - "@smithy/eventstream-serde-node": "^3.0.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-stream": "^3.0.1", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/client-sso": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.592.0.tgz", - "integrity": "sha512-w+SuW47jQqvOC7fonyjFjsOh3yjqJ+VpWdVrmrl0E/KryBE7ho/Wn991Buf/EiHHeJikoWgHsAIPkBH29+ntdA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.596.0.tgz", - "integrity": "sha512-KnTWtKzO0N+rMdIrVwbewFp4FAvVWBV/ekCAh5w7EN+uAvBHxMoFElE2RwlcRF/gH1/F715OspPMvOxPom6bMA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/client-sts": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.596.0.tgz", - "integrity": "sha512-37+WQDjgmqS/YXj3vPzIVIrbXaFcZ1WXk715AMGIPBZn9Y2/wr2bmSTpX7bsMyn0G8+LxmoIxFcG7n1Gu0nvLg==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/core": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.592.0.tgz", - "integrity": "sha512-gLPMXR/HXDP+9gXAt58t7gaMTvRts9i6Q7NMISpkGF54wehskl5WGrbdtHJFylrlJ5BQo3XVY6i661o+EuR1wg==", - "dependencies": { - "@smithy/core": "^2.2.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/signature-v4": "^3.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "fast-xml-parser": "4.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.596.0.tgz", - "integrity": "sha512-nnmvEsz1KJgRmfSZJPWuzbxPRXu8Y+/78Ifa1jY3fQKSKdEJfXMDsjPljJvMDBl4dZ8pf5Hwx+S/ONnMEDwYEA==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/util-stream": "^3.0.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.596.0.tgz", - "integrity": "sha512-c7PLtd7GbnOVAc5sk3sVlHxLvEsM8RF96rsBGlRo4AVpil/lXLKyNv9VarS4w/ZZZoRbJRyZ+m92PjNcLvpTDQ==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.587.0", - "@aws-sdk/credential-provider-http": "3.596.0", - "@aws-sdk/credential-provider-process": "3.587.0", - "@aws-sdk/credential-provider-sso": "3.592.0", - "@aws-sdk/credential-provider-web-identity": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.596.0" - } - }, - "node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.596.0.tgz", - "integrity": "sha512-F4MLyXpQyie1AnJS9n7TIRL0aF7YH8tKMIJXDsM5OXpSZi2en+yR6SzsxvHf5dwS2Ga8LUdEJyiyS2NoebaJGA==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.587.0", - "@aws-sdk/credential-provider-http": "3.596.0", - "@aws-sdk/credential-provider-ini": "3.596.0", - "@aws-sdk/credential-provider-process": "3.587.0", - "@aws-sdk/credential-provider-sso": "3.592.0", - "@aws-sdk/credential-provider-web-identity": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.592.0.tgz", - "integrity": "sha512-fYFzAdDHKHvhtufPPtrLdSv8lO6GuW3em6n3erM5uFdpGytNpjXvr3XGokIsuXcNkETAY/Xihg+G9ksNE8WJxQ==", - "dependencies": { - "@aws-sdk/client-sso": "3.592.0", - "@aws-sdk/token-providers": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-secrets-manager": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.596.0.tgz", - "integrity": "sha512-uDLeVZlMCr0NUpFHs/YBRVhOcsz14gVdQaPE/vhBal2ke4L3XMqfE8YyNMD/8GXvEFX04sJ/HGhvPzoX9+451g==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.596.0", - "@aws-sdk/client-sts": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-secrets-manager/node_modules/@aws-sdk/client-sso": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.592.0.tgz", - "integrity": "sha512-w+SuW47jQqvOC7fonyjFjsOh3yjqJ+VpWdVrmrl0E/KryBE7ho/Wn991Buf/EiHHeJikoWgHsAIPkBH29+ntdA==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-secrets-manager/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.596.0.tgz", - "integrity": "sha512-KnTWtKzO0N+rMdIrVwbewFp4FAvVWBV/ekCAh5w7EN+uAvBHxMoFElE2RwlcRF/gH1/F715OspPMvOxPom6bMA==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-secrets-manager/node_modules/@aws-sdk/client-sts": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.596.0.tgz", - "integrity": "sha512-37+WQDjgmqS/YXj3vPzIVIrbXaFcZ1WXk715AMGIPBZn9Y2/wr2bmSTpX7bsMyn0G8+LxmoIxFcG7n1Gu0nvLg==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.600.0.tgz", + "integrity": "sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-secrets-manager/node_modules/@aws-sdk/core": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.592.0.tgz", - "integrity": "sha512-gLPMXR/HXDP+9gXAt58t7gaMTvRts9i6Q7NMISpkGF54wehskl5WGrbdtHJFylrlJ5BQo3XVY6i661o+EuR1wg==", - "dev": true, - "dependencies": { - "@smithy/core": "^2.2.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/signature-v4": "^3.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "fast-xml-parser": "4.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-secrets-manager/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.596.0.tgz", - "integrity": "sha512-nnmvEsz1KJgRmfSZJPWuzbxPRXu8Y+/78Ifa1jY3fQKSKdEJfXMDsjPljJvMDBl4dZ8pf5Hwx+S/ONnMEDwYEA==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/util-stream": "^3.0.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-secrets-manager/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.596.0.tgz", - "integrity": "sha512-c7PLtd7GbnOVAc5sk3sVlHxLvEsM8RF96rsBGlRo4AVpil/lXLKyNv9VarS4w/ZZZoRbJRyZ+m92PjNcLvpTDQ==", - "dev": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "3.587.0", - "@aws-sdk/credential-provider-http": "3.596.0", - "@aws-sdk/credential-provider-process": "3.587.0", - "@aws-sdk/credential-provider-sso": "3.592.0", - "@aws-sdk/credential-provider-web-identity": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.596.0" - } - }, - "node_modules/@aws-sdk/client-secrets-manager/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.596.0.tgz", - "integrity": "sha512-F4MLyXpQyie1AnJS9n7TIRL0aF7YH8tKMIJXDsM5OXpSZi2en+yR6SzsxvHf5dwS2Ga8LUdEJyiyS2NoebaJGA==", - "dev": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "3.587.0", - "@aws-sdk/credential-provider-http": "3.596.0", - "@aws-sdk/credential-provider-ini": "3.596.0", - "@aws-sdk/credential-provider-process": "3.587.0", - "@aws-sdk/credential-provider-sso": "3.592.0", - "@aws-sdk/credential-provider-web-identity": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-secrets-manager/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.592.0.tgz", - "integrity": "sha512-fYFzAdDHKHvhtufPPtrLdSv8lO6GuW3em6n3erM5uFdpGytNpjXvr3XGokIsuXcNkETAY/Xihg+G9ksNE8WJxQ==", - "dev": true, - "dependencies": { - "@aws-sdk/client-sso": "3.592.0", - "@aws-sdk/token-providers": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-ssm": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.596.0.tgz", - "integrity": "sha512-6gTCjQQ3ZMABSzKLnjEbiqDS4C+BpSAMyw9022/vAP7ybdF/fJENBy4XEwKgZ6U7VhLZePrO0ESyYYcpBnAc+g==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.596.0", - "@aws-sdk/client-sts": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.0.0", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.600.0.tgz", + "integrity": "sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.598.0", + "@aws-sdk/credential-provider-http": "3.598.0", + "@aws-sdk/credential-provider-ini": "3.598.0", + "@aws-sdk/credential-provider-process": "3.598.0", + "@aws-sdk/credential-provider-sso": "3.598.0", + "@aws-sdk/credential-provider-web-identity": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/credential-provider-imds": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/client-sso": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.592.0.tgz", - "integrity": "sha512-w+SuW47jQqvOC7fonyjFjsOh3yjqJ+VpWdVrmrl0E/KryBE7ho/Wn991Buf/EiHHeJikoWgHsAIPkBH29+ntdA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "node_modules/@aws-sdk/client-lambda": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.600.0.tgz", + "integrity": "sha512-J7tDJ0TOILuvRp9+19cotI4BU2YFO9XKDX9rZY56pAu72F/gCIKvf6g9hI7h1HOCSw0Ug+FIFciOJhRQk+YKCQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.600.0", + "@aws-sdk/client-sts": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/eventstream-serde-browser": "^3.0.2", + "@smithy/eventstream-serde-config-resolver": "^3.0.1", + "@smithy/eventstream-serde-node": "^3.0.2", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-stream": "^3.0.2", "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.0.1", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.596.0.tgz", - "integrity": "sha512-KnTWtKzO0N+rMdIrVwbewFp4FAvVWBV/ekCAh5w7EN+uAvBHxMoFElE2RwlcRF/gH1/F715OspPMvOxPom6bMA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.600.0.tgz", + "integrity": "sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sts": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -1994,49 +991,49 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/client-sts": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.596.0.tgz", - "integrity": "sha512-37+WQDjgmqS/YXj3vPzIVIrbXaFcZ1WXk715AMGIPBZn9Y2/wr2bmSTpX7bsMyn0G8+LxmoIxFcG7n1Gu0nvLg==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/client-sts": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.600.0.tgz", + "integrity": "sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -2044,198 +1041,302 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/core": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.592.0.tgz", - "integrity": "sha512-gLPMXR/HXDP+9gXAt58t7gaMTvRts9i6Q7NMISpkGF54wehskl5WGrbdtHJFylrlJ5BQo3XVY6i661o+EuR1wg==", - "dependencies": { - "@smithy/core": "^2.2.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/signature-v4": "^3.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "fast-xml-parser": "4.2.5", + "node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.600.0.tgz", + "integrity": "sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.598.0", + "@aws-sdk/credential-provider-http": "3.598.0", + "@aws-sdk/credential-provider-ini": "3.598.0", + "@aws-sdk/credential-provider-process": "3.598.0", + "@aws-sdk/credential-provider-sso": "3.598.0", + "@aws-sdk/credential-provider-web-identity": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/credential-provider-imds": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.596.0.tgz", - "integrity": "sha512-nnmvEsz1KJgRmfSZJPWuzbxPRXu8Y+/78Ifa1jY3fQKSKdEJfXMDsjPljJvMDBl4dZ8pf5Hwx+S/ONnMEDwYEA==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/util-stream": "^3.0.1", - "tslib": "^2.6.2" + "node_modules/@aws-sdk/client-secrets-manager": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.600.0.tgz", + "integrity": "sha512-9UzjXBw4ApF2xj2JnapLdoY6yCdSgs2Eu1LrODKaoFHKvKfQjk+hYeO+8Mk9R/iLkZ2I0EtgnR+E23004RHzdg==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.600.0", + "@aws-sdk/client-sts": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2", + "uuid": "^9.0.1" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.596.0.tgz", - "integrity": "sha512-c7PLtd7GbnOVAc5sk3sVlHxLvEsM8RF96rsBGlRo4AVpil/lXLKyNv9VarS4w/ZZZoRbJRyZ+m92PjNcLvpTDQ==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.587.0", - "@aws-sdk/credential-provider-http": "3.596.0", - "@aws-sdk/credential-provider-process": "3.587.0", - "@aws-sdk/credential-provider-sso": "3.592.0", - "@aws-sdk/credential-provider-web-identity": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "node_modules/@aws-sdk/client-secrets-manager/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.600.0.tgz", + "integrity": "sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sts": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.596.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.596.0.tgz", - "integrity": "sha512-F4MLyXpQyie1AnJS9n7TIRL0aF7YH8tKMIJXDsM5OXpSZi2en+yR6SzsxvHf5dwS2Ga8LUdEJyiyS2NoebaJGA==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.587.0", - "@aws-sdk/credential-provider-http": "3.596.0", - "@aws-sdk/credential-provider-ini": "3.596.0", - "@aws-sdk/credential-provider-process": "3.587.0", - "@aws-sdk/credential-provider-sso": "3.592.0", - "@aws-sdk/credential-provider-web-identity": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "node_modules/@aws-sdk/client-secrets-manager/node_modules/@aws-sdk/client-sts": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.600.0.tgz", + "integrity": "sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.592.0.tgz", - "integrity": "sha512-fYFzAdDHKHvhtufPPtrLdSv8lO6GuW3em6n3erM5uFdpGytNpjXvr3XGokIsuXcNkETAY/Xihg+G9ksNE8WJxQ==", - "dependencies": { - "@aws-sdk/client-sso": "3.592.0", - "@aws-sdk/token-providers": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "node_modules/@aws-sdk/client-secrets-manager/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.600.0.tgz", + "integrity": "sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw==", + "dev": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.598.0", + "@aws-sdk/credential-provider-http": "3.598.0", + "@aws-sdk/credential-provider-ini": "3.598.0", + "@aws-sdk/credential-provider-process": "3.598.0", + "@aws-sdk/credential-provider-sso": "3.598.0", + "@aws-sdk/credential-provider-web-identity": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/credential-provider-imds": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.588.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.588.0.tgz", - "integrity": "sha512-zKS+xUkBLfwjbh77ZjtRUoG/vR/fyDteSE6rOAzwlmHQL8p+QUX+zNUNvCInvPi62zGBhEwXOvzs8zvnT4NzfQ==", - "peer": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.588.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.1.1", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "node_modules/@aws-sdk/client-ssm": { + "version": "3.603.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.603.0.tgz", + "integrity": "sha512-KyHp8mxIFUDeAkjSiPzfDTFcrP3WSjQeNUYBTG76cowkmYZgc0QqVfgQwjOt3rQvmkG8R7M/vmDIwLTh1xx/7A==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.600.0", + "@aws-sdk/client-sts": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" + "@smithy/util-waiter": "^3.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.588.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.588.0.tgz", - "integrity": "sha512-CTbgtLSg0y2jIOtESuQKkRIqRe/FQmKuyzFWc+Qy6yGcbk1Pyusfz2BC+GGwpYU+1BlBBSNnLQHpx3XY87+aSA==", - "peer": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.588.0", - "@aws-sdk/core": "3.588.0", - "@aws-sdk/credential-provider-node": "3.588.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.1.1", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.600.0.tgz", + "integrity": "sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sts": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -2243,50 +1344,49 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.588.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.588.0.tgz", - "integrity": "sha512-UIMjcUikgG9NIENQxSyJNTHMD8TaTfK6Jjf1iuZSyQRyTrcGy0/xcDxrmwZQFAPkOPUf6w9KqydLkMLcYOBdPQ==", - "peer": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.588.0", - "@aws-sdk/core": "3.588.0", - "@aws-sdk/credential-provider-node": "3.588.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.1.1", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/client-sts": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.600.0.tgz", + "integrity": "sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -2294,100 +1394,69 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-xray": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-xray/-/client-xray-3.596.0.tgz", - "integrity": "sha512-R3NzlgjNlp1IxJbgTpktNndM2lJi/Wkg7x7wtvx3114Ghokl0IJCk6mnVfwgBsi/hPgaA3Hpumo72Cy2R1TkuQ==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.596.0", - "@aws-sdk/client-sts": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", + "node_modules/@aws-sdk/client-ssm/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.600.0.tgz", + "integrity": "sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.598.0", + "@aws-sdk/credential-provider-http": "3.598.0", + "@aws-sdk/credential-provider-ini": "3.598.0", + "@aws-sdk/credential-provider-process": "3.598.0", + "@aws-sdk/credential-provider-sso": "3.598.0", + "@aws-sdk/credential-provider-web-identity": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/credential-provider-imds": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-xray/node_modules/@aws-sdk/client-sso": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.592.0.tgz", - "integrity": "sha512-w+SuW47jQqvOC7fonyjFjsOh3yjqJ+VpWdVrmrl0E/KryBE7ho/Wn991Buf/EiHHeJikoWgHsAIPkBH29+ntdA==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "node_modules/@aws-sdk/client-sso": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.598.0.tgz", + "integrity": "sha512-nOI5lqPYa+YZlrrzwAJywJSw3MKVjvu6Ge2fCqQUNYMfxFB0NAaDFnl0EPjXi+sEbtCuz/uWE77poHbqiZ+7Iw==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -2395,50 +1464,50 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-xray/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.596.0.tgz", - "integrity": "sha512-KnTWtKzO0N+rMdIrVwbewFp4FAvVWBV/ekCAh5w7EN+uAvBHxMoFElE2RwlcRF/gH1/F715OspPMvOxPom6bMA==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.598.0.tgz", + "integrity": "sha512-jfdH1pAO9Tt8Nkta/JJLoUnwl7jaRdxToQTJfUtE+o3+0JP5sA4LfC2rBkJSWcU5BdAA+kyOs5Lv776DlN04Vg==", + "peer": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sts": "3.598.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.598.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -2446,50 +1515,50 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-xray/node_modules/@aws-sdk/client-sts": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.596.0.tgz", - "integrity": "sha512-37+WQDjgmqS/YXj3vPzIVIrbXaFcZ1WXk715AMGIPBZn9Y2/wr2bmSTpX7bsMyn0G8+LxmoIxFcG7n1Gu0nvLg==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.596.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.596.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "node_modules/@aws-sdk/client-sts": { + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.598.0.tgz", + "integrity": "sha512-bXhz/cHL0iB9UH9IFtMaJJf4F8mV+HzncETCRFzZ9SyUMt5rP9j8A7VZknqGYSx/6mI8SsB1XJQkWSbhn6FiSQ==", + "peer": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.598.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.598.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -2497,104 +1566,177 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-xray/node_modules/@aws-sdk/core": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.592.0.tgz", - "integrity": "sha512-gLPMXR/HXDP+9gXAt58t7gaMTvRts9i6Q7NMISpkGF54wehskl5WGrbdtHJFylrlJ5BQo3XVY6i661o+EuR1wg==", - "dev": true, - "dependencies": { - "@smithy/core": "^2.2.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/signature-v4": "^3.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "fast-xml-parser": "4.2.5", + "node_modules/@aws-sdk/client-xray": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-xray/-/client-xray-3.600.0.tgz", + "integrity": "sha512-wx1LccngeOdYSVUtzhjR7GBs2z8kUbHX7dgt7wFlkbS+wauBVEzcfOBhArCYVJ1qddmdd5J5/BKCuOI8r2EPSQ==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.600.0", + "@aws-sdk/client-sts": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-xray/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.596.0.tgz", - "integrity": "sha512-nnmvEsz1KJgRmfSZJPWuzbxPRXu8Y+/78Ifa1jY3fQKSKdEJfXMDsjPljJvMDBl4dZ8pf5Hwx+S/ONnMEDwYEA==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/util-stream": "^3.0.1", + "node_modules/@aws-sdk/client-xray/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.600.0.tgz", + "integrity": "sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sts": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-xray/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.596.0.tgz", - "integrity": "sha512-c7PLtd7GbnOVAc5sk3sVlHxLvEsM8RF96rsBGlRo4AVpil/lXLKyNv9VarS4w/ZZZoRbJRyZ+m92PjNcLvpTDQ==", - "dev": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "3.587.0", - "@aws-sdk/credential-provider-http": "3.596.0", - "@aws-sdk/credential-provider-process": "3.587.0", - "@aws-sdk/credential-provider-sso": "3.592.0", - "@aws-sdk/credential-provider-web-identity": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "node_modules/@aws-sdk/client-xray/node_modules/@aws-sdk/client-sts": { + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.600.0.tgz", + "integrity": "sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.600.0", + "@aws-sdk/core": "3.598.0", + "@aws-sdk/credential-provider-node": "3.600.0", + "@aws-sdk/middleware-host-header": "3.598.0", + "@aws-sdk/middleware-logger": "3.598.0", + "@aws-sdk/middleware-recursion-detection": "3.598.0", + "@aws-sdk/middleware-user-agent": "3.598.0", + "@aws-sdk/region-config-resolver": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@aws-sdk/util-user-agent-browser": "3.598.0", + "@aws-sdk/util-user-agent-node": "3.598.0", + "@smithy/config-resolver": "^3.0.2", + "@smithy/core": "^2.2.1", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/hash-node": "^3.0.1", + "@smithy/invalid-dependency": "^3.0.1", + "@smithy/middleware-content-length": "^3.0.1", + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.4", + "@smithy/util-defaults-mode-node": "^3.0.4", + "@smithy/util-endpoints": "^2.0.2", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.596.0" } }, "node_modules/@aws-sdk/client-xray/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.596.0.tgz", - "integrity": "sha512-F4MLyXpQyie1AnJS9n7TIRL0aF7YH8tKMIJXDsM5OXpSZi2en+yR6SzsxvHf5dwS2Ga8LUdEJyiyS2NoebaJGA==", - "dev": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "3.587.0", - "@aws-sdk/credential-provider-http": "3.596.0", - "@aws-sdk/credential-provider-ini": "3.596.0", - "@aws-sdk/credential-provider-process": "3.587.0", - "@aws-sdk/credential-provider-sso": "3.592.0", - "@aws-sdk/credential-provider-web-identity": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-xray/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.592.0.tgz", - "integrity": "sha512-fYFzAdDHKHvhtufPPtrLdSv8lO6GuW3em6n3erM5uFdpGytNpjXvr3XGokIsuXcNkETAY/Xihg+G9ksNE8WJxQ==", - "dev": true, - "dependencies": { - "@aws-sdk/client-sso": "3.592.0", - "@aws-sdk/token-providers": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "version": "3.600.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.600.0.tgz", + "integrity": "sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw==", + "dev": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.598.0", + "@aws-sdk/credential-provider-http": "3.598.0", + "@aws-sdk/credential-provider-ini": "3.598.0", + "@aws-sdk/credential-provider-process": "3.598.0", + "@aws-sdk/credential-provider-sso": "3.598.0", + "@aws-sdk/credential-provider-web-identity": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/credential-provider-imds": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -2602,16 +1744,15 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.588.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.588.0.tgz", - "integrity": "sha512-O1c2+9ce46Z+iiid+W3iC1IvPbfIo5ev9CBi54GdNB9SaI8/3+f8MJcux0D6c9toCF0ArMersN/gp8ek57e9uQ==", - "peer": true, - "dependencies": { - "@smithy/core": "^2.1.1", - "@smithy/protocol-http": "^4.0.0", - "@smithy/signature-v4": "^3.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.598.0.tgz", + "integrity": "sha512-HaSjt7puO5Cc7cOlrXFCW0rtA0BM9lvzjl56x0A20Pt+0wxXGeTOZZOkXQIepbrFkV2e/HYukuT9e99vXDm59g==", + "dependencies": { + "@smithy/core": "^2.2.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/signature-v4": "^3.1.0", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", "fast-xml-parser": "4.2.5", "tslib": "^2.6.2" }, @@ -2620,13 +1761,13 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.587.0.tgz", - "integrity": "sha512-Hyg/5KFECIk2k5o8wnVEiniV86yVkhn5kzITUydmNGCkXdBFHMHRx6hleQ1bqwJHbBskyu8nbYamzcwymmGwmw==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.598.0.tgz", + "integrity": "sha512-vi1khgn7yXzLCcgSIzQrrtd2ilUM0dWodxj3PQ6BLfP0O+q1imO3hG1nq7DVyJtq7rFHs6+9N8G4mYvTkxby2w==", "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -2634,19 +1775,18 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.587.0.tgz", - "integrity": "sha512-Su1SRWVRCuR1e32oxX3C1V4c5hpPN20WYcRfdcr2wXwHqSvys5DrnmuCC+JoEnS/zt3adUJhPliTqpfKgSdMrA==", - "peer": true, - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/util-stream": "^3.0.1", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.598.0.tgz", + "integrity": "sha512-N7cIafi4HVlQvEgvZSo1G4T9qb/JMLGMdBsDCT5XkeJrF0aptQWzTFH0jIdZcLrMYvzPcuEyO3yCBe6cy/ba0g==", + "dependencies": { + "@aws-sdk/types": "3.598.0", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/util-stream": "^3.0.2", "tslib": "^2.6.2" }, "engines": { @@ -2654,47 +1794,46 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.588.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.588.0.tgz", - "integrity": "sha512-tP/YmEKvYpmp7pCR2OuhoOhAOtm6BbZ1hbeG9Sw9RFZi55dbGPHqMmfvvzHFAGsJ20z4/oDS+UnHaWVhRnV82w==", - "peer": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "3.587.0", - "@aws-sdk/credential-provider-http": "3.587.0", - "@aws-sdk/credential-provider-process": "3.587.0", - "@aws-sdk/credential-provider-sso": "3.588.0", - "@aws-sdk/credential-provider-web-identity": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.598.0.tgz", + "integrity": "sha512-/ppcIVUbRwDIwJDoYfp90X3+AuJo2mvE52Y1t2VSrvUovYn6N4v95/vXj6LS8CNDhz2jvEJYmu+0cTMHdhI6eA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.598.0", + "@aws-sdk/credential-provider-http": "3.598.0", + "@aws-sdk/credential-provider-process": "3.598.0", + "@aws-sdk/credential-provider-sso": "3.598.0", + "@aws-sdk/credential-provider-web-identity": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/credential-provider-imds": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.588.0" + "@aws-sdk/client-sts": "^3.598.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.588.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.588.0.tgz", - "integrity": "sha512-8s4Ruo6q1YIrj8AZKBiUQG42051ytochDMSqdVOEZGxskfvmt2XALyi5SsWd0Ve3zR95zi+EtRBNPn2EU8sQpA==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.598.0.tgz", + "integrity": "sha512-sXTlqL5I/awlF9Dg2MQ17SfrEaABVnsj2mf4jF5qQrIRhfbvQOIYdEqdy8Rn1AWlJMz/N450SGzc0XJ5owxxqw==", "peer": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.587.0", - "@aws-sdk/credential-provider-http": "3.587.0", - "@aws-sdk/credential-provider-ini": "3.588.0", - "@aws-sdk/credential-provider-process": "3.587.0", - "@aws-sdk/credential-provider-sso": "3.588.0", - "@aws-sdk/credential-provider-web-identity": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/credential-provider-env": "3.598.0", + "@aws-sdk/credential-provider-http": "3.598.0", + "@aws-sdk/credential-provider-ini": "3.598.0", + "@aws-sdk/credential-provider-process": "3.598.0", + "@aws-sdk/credential-provider-sso": "3.598.0", + "@aws-sdk/credential-provider-web-identity": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/credential-provider-imds": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -2702,14 +1841,14 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.587.0.tgz", - "integrity": "sha512-V4xT3iCqkF8uL6QC4gqBJg/2asd/damswP1h9HCfqTllmPWzImS+8WD3VjgTLw5b0KbTy+ZdUhKc0wDnyzkzxg==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.598.0.tgz", + "integrity": "sha512-rM707XbLW8huMk722AgjVyxu2tMZee++fNA8TJVNgs1Ma02Wx6bBrfIvlyK0rCcIRb0WdQYP6fe3Xhiu4e8IBA==", + "dependencies": { + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -2717,17 +1856,16 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.588.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.588.0.tgz", - "integrity": "sha512-1GstMCyFzenVeppK7hWazMvo3P1DXKP70XkXAjH8H2ELBVg5X8Zt043cnQ7CMt4XjCV+ettHAtc9kz/gJTkDNQ==", - "peer": true, - "dependencies": { - "@aws-sdk/client-sso": "3.588.0", - "@aws-sdk/token-providers": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.598.0.tgz", + "integrity": "sha512-5InwUmrAuqQdOOgxTccRayMMkSmekdLk6s+az9tmikq0QFAHUCtofI+/fllMXSR9iL6JbGYi1940+EUmS4pHJA==", + "dependencies": { + "@aws-sdk/client-sso": "3.598.0", + "@aws-sdk/token-providers": "3.598.0", + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -2735,20 +1873,20 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.587.0.tgz", - "integrity": "sha512-XqIx/I2PG7kyuw3WjAP9wKlxy8IvFJwB8asOFT1xPFoVfZYKIogjG9oLP5YiRtfvDkWIztHmg5MlVv3HdJDGRw==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.598.0.tgz", + "integrity": "sha512-GV5GdiMbz5Tz9JO4NJtRoFXjW0GPEujA0j+5J/B723rTN+REHthJu48HdBKouHGhdzkDWkkh1bu52V02Wprw8w==", "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.587.0" + "@aws-sdk/client-sts": "^3.598.0" } }, "node_modules/@aws-sdk/endpoint-cache": { @@ -2764,32 +1902,32 @@ } }, "node_modules/@aws-sdk/lib-dynamodb": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.596.0.tgz", - "integrity": "sha512-nTl1lsVRG1iQeY2dIyIWbPrvKepSpE/doL9ET3hAzjTClm81mpvYs3XIVtQsbcmjkgQ62GUrym6D1nk1LcIq+A==", + "version": "3.602.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.602.0.tgz", + "integrity": "sha512-6kKNyjP0WawAU1dDiA00eK2MfYH0eaviuc/ctQ7HkpWDAuCAfY7alKXAvks+6qCXf+T1SzucIUUj6zlG5i0a2w==", "dependencies": { - "@aws-sdk/util-dynamodb": "3.596.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", + "@aws-sdk/util-dynamodb": "3.602.0", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-dynamodb": "^3.596.0" + "@aws-sdk/client-dynamodb": "^3.602.0" } }, "node_modules/@aws-sdk/middleware-endpoint-discovery": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.587.0.tgz", - "integrity": "sha512-/FCTOwO2/GtGx31Y0aO149aXw/LbyyYFJp82fQQCR0eff9RilJ5ViQCdCpcf9zf0ZIlvqGy9aXVutBQU83wlGg==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.598.0.tgz", + "integrity": "sha512-TaFo3rfapVP0FiddH2zDyA5R5XNk2M+zMeUZaBRveYamSQ11F+fMGcedBgbOsv7yNESvaZvjlcw2K+cx3jOchA==", "dependencies": { "@aws-sdk/endpoint-cache": "3.572.0", - "@aws-sdk/types": "3.577.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.598.0", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -2797,13 +1935,13 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.577.0.tgz", - "integrity": "sha512-9ca5MJz455CODIVXs0/sWmJm7t3QO4EUa1zf8pE8grLpzf0J94bz/skDWm37Pli13T3WaAQBHCTiH2gUVfCsWg==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.598.0.tgz", + "integrity": "sha512-WiaG059YBQwQraNejLIi0gMNkX7dfPZ8hDIhvMr5aVPRbaHH8AYF3iNSsXYCHvA2Cfa1O9haYXsuMF9flXnCmA==", "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.598.0", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -2811,12 +1949,12 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.577.0.tgz", - "integrity": "sha512-aPFGpGjTZcJYk+24bg7jT4XdIp42mFXSuPt49lw5KygefLyJM/sB0bKKqPYYivW0rcuZ9brQ58eZUNthrzYAvg==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.598.0.tgz", + "integrity": "sha512-bxBjf/VYiu3zfu8SYM2S9dQQc3tz5uBAOcPz/Bt8DyyK3GgOpjhschH/2XuUErsoUO1gDJqZSdGOmuHGZQn00Q==", "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.598.0", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -2824,13 +1962,13 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.577.0.tgz", - "integrity": "sha512-pn3ZVEd2iobKJlR3H+bDilHjgRnNrQ6HMmK9ZzZw89Ckn3Dcbv48xOv4RJvu0aU8SDLl/SNCxppKjeLDTPGBNA==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.598.0.tgz", + "integrity": "sha512-vjT9BeFY9FeN0f8hm2l6F53tI0N5bUq6RcDkQXKNabXBnQxKptJRad6oP2X5y3FoVfBLOuDkQgiC2940GIPxtQ==", "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.598.0", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -2838,14 +1976,14 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.587.0.tgz", - "integrity": "sha512-SyDomN+IOrygLucziG7/nOHkjUXES5oH5T7p8AboO8oakMQJdnudNXiYWTicQWO52R51U6CR27rcMPTGeMedYA==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.598.0.tgz", + "integrity": "sha512-4tjESlHG5B5MdjUaLK7tQs/miUtHbb6deauQx8ryqSBYOhfHVgb1ZnzvQR0bTrhpqUg0WlybSkDaZAICf9xctg==", + "dependencies": { + "@aws-sdk/types": "3.598.0", + "@aws-sdk/util-endpoints": "3.598.0", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -2853,15 +1991,15 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.587.0.tgz", - "integrity": "sha512-93I7IPZtulZQoRK+O20IJ4a1syWwYPzoO2gc3v+/GNZflZPV3QJXuVbIm0pxBsu0n/mzKGUKqSOLPIaN098HcQ==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.598.0.tgz", + "integrity": "sha512-oYXhmTokSav4ytmWleCr3rs/1nyvZW/S0tdi6X7u+dLNL5Jee+uMxWGzgOrWK6wrQOzucLVjS4E/wA11Kv2GTw==", "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.598.0", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/types": "^3.1.0", "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", + "@smithy/util-middleware": "^3.0.1", "tslib": "^2.6.2" }, "engines": { @@ -2869,29 +2007,29 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.587.0.tgz", - "integrity": "sha512-ULqhbnLy1hmJNRcukANBWJmum3BbjXnurLPSFXoGdV0llXYlG55SzIla2VYqdveQEEjmsBuTZdFvXAtNpmS5Zg==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.598.0.tgz", + "integrity": "sha512-TKY1EVdHVBnZqpyxyTHdpZpa1tUpb6nxVeRNn1zWG8QB5MvH4ALLd/jR+gtmWDNQbIG4cVuBOZFVL8hIYicKTA==", + "dependencies": { + "@aws-sdk/types": "3.598.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.587.0" + "@aws-sdk/client-sso-oidc": "^3.598.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.577.0.tgz", - "integrity": "sha512-FT2JZES3wBKN/alfmhlo+3ZOq/XJ0C7QOZcDNrpKjB0kqYoKjhVKZ/Hx6ArR0czkKfHzBBEs6y40ebIHx2nSmA==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.598.0.tgz", + "integrity": "sha512-742uRl6z7u0LFmZwDrFP6r1wlZcgVPw+/TilluDJmCAR8BgRw3IR+743kUXKBGd8QZDRW2n6v/PYsi/AWCDDMQ==", "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -2899,9 +2037,9 @@ } }, "node_modules/@aws-sdk/util-dynamodb": { - "version": "3.596.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.596.0.tgz", - "integrity": "sha512-oLdB6rUo0gQmry97yvOZ3pJvgzNZLrTk29O2NvMRB5EtXStymfxC53ZeJShdI20jZgP/l8vRUtVf7tjWwjlcIQ==", + "version": "3.602.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.602.0.tgz", + "integrity": "sha512-0QsRLE4cK0h9jseCbaBZpcLzBcOgPMdsEy4wIYvcXivHIdgt/JQxs329NF7EfWQU8h3PU5hRy3tiTBLuB4TmgQ==", "dependencies": { "tslib": "^2.6.2" }, @@ -2909,17 +2047,17 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-dynamodb": "^3.596.0" + "@aws-sdk/client-dynamodb": "^3.602.0" } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.587.0.tgz", - "integrity": "sha512-8I1HG6Em8wQWqKcRW6m358mqebRVNpL8XrrEoT4In7xqkKkmYtHRNVYP6lcmiQh5pZ/c/FXu8dSchuFIWyEtqQ==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.598.0.tgz", + "integrity": "sha512-Qo9UoiVVZxcOEdiOMZg3xb1mzkTxrhd4qSlg5QQrfWPJVx/QOg+Iy0NtGxPtHtVZNHZxohYwDwV/tfsnDSE2gQ==", "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/types": "^3.0.0", - "@smithy/util-endpoints": "^2.0.1", + "@aws-sdk/types": "3.598.0", + "@smithy/types": "^3.1.0", + "@smithy/util-endpoints": "^2.0.2", "tslib": "^2.6.2" }, "engines": { @@ -2938,24 +2076,24 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.577.0.tgz", - "integrity": "sha512-zEAzHgR6HWpZOH7xFgeJLc6/CzMcx4nxeQolZxVZoB5pPaJd3CjyRhZN0xXeZB0XIRCWmb4yJBgyiugXLNMkLA==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.598.0.tgz", + "integrity": "sha512-36Sxo6F+ykElaL1mWzWjlg+1epMpSe8obwhCN1yGE7Js9ywy5U6k6l+A3q3YM9YRbm740sNxncbwLklMvuhTKw==", "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.598.0", + "@smithy/types": "^3.1.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.587.0.tgz", - "integrity": "sha512-Pnl+DUe/bvnbEEDHP3iVJrOtE3HbFJBPgsD6vJ+ml/+IYk1Eq49jEG+EHZdNTPz3SDG0kbp2+7u41MKYJHR/iQ==", + "version": "3.598.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.598.0.tgz", + "integrity": "sha512-oyWGcOlfTdzkC6SVplyr0AGh54IMrDxbhg5RxJ5P+V4BKfcDoDcZV9xenUk9NsOi9MuUjxMumb9UJGkDhM1m0A==", "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.598.0", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -2970,14 +2108,6 @@ } } }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "dependencies": { - "tslib": "^2.3.1" - } - }, "node_modules/@babel/code-frame": { "version": "7.24.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz", @@ -3577,9 +2707,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.4.tgz", - "integrity": "sha512-Zrm+B33R4LWPLjDEVnEqt2+SLTATlru1q/xYKVn8oVTbiRBGmK2VIMoIYGJDGyftnGaC788IuzGFAlb7IQ0Y8A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", "cpu": [ "ppc64" ], @@ -3592,9 +2722,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.4.tgz", - "integrity": "sha512-E7H/yTd8kGQfY4z9t3nRPk/hrhaCajfA3YSQSBrst8B+3uTcgsi8N+ZWYCaeIDsiVs6m65JPCaQN/DxBRclF3A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "cpu": [ "arm" ], @@ -3607,9 +2737,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.4.tgz", - "integrity": "sha512-fYFnz+ObClJ3dNiITySBUx+oNalYUT18/AryMxfovLkYWbutXsct3Wz2ZWAcGGppp+RVVX5FiXeLYGi97umisA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "cpu": [ "arm64" ], @@ -3622,9 +2752,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.4.tgz", - "integrity": "sha512-mDqmlge3hFbEPbCWxp4fM6hqq7aZfLEHZAKGP9viq9wMUBVQx202aDIfc3l+d2cKhUJM741VrCXEzRFhPDKH3Q==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "cpu": [ "x64" ], @@ -3637,9 +2767,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.4.tgz", - "integrity": "sha512-72eaIrDZDSiWqpmCzVaBD58c8ea8cw/U0fq/PPOTqE3c53D0xVMRt2ooIABZ6/wj99Y+h4ksT/+I+srCDLU9TA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "cpu": [ "arm64" ], @@ -3652,9 +2782,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.4.tgz", - "integrity": "sha512-uBsuwRMehGmw1JC7Vecu/upOjTsMhgahmDkWhGLWxIgUn2x/Y4tIwUZngsmVb6XyPSTXJYS4YiASKPcm9Zitag==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "cpu": [ "x64" ], @@ -3667,9 +2797,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.4.tgz", - "integrity": "sha512-8JfuSC6YMSAEIZIWNL3GtdUT5NhUA/CMUCpZdDRolUXNAXEE/Vbpe6qlGLpfThtY5NwXq8Hi4nJy4YfPh+TwAg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "cpu": [ "arm64" ], @@ -3682,9 +2812,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.4.tgz", - "integrity": "sha512-8d9y9eQhxv4ef7JmXny7591P/PYsDFc4+STaxC1GBv0tMyCdyWfXu2jBuqRsyhY8uL2HU8uPyscgE2KxCY9imQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "cpu": [ "x64" ], @@ -3697,9 +2827,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.4.tgz", - "integrity": "sha512-2rqFFefpYmpMs+FWjkzSgXg5vViocqpq5a1PSRgT0AvSgxoXmGF17qfGAzKedg6wAwyM7UltrKVo9kxaJLMF/g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "cpu": [ "arm" ], @@ -3712,9 +2842,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.4.tgz", - "integrity": "sha512-/GLD2orjNU50v9PcxNpYZi+y8dJ7e7/LhQukN3S4jNDXCKkyyiyAz9zDw3siZ7Eh1tRcnCHAo/WcqKMzmi4eMQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "cpu": [ "arm64" ], @@ -3727,9 +2857,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.4.tgz", - "integrity": "sha512-pNftBl7m/tFG3t2m/tSjuYeWIffzwAZT9m08+9DPLizxVOsUl8DdFzn9HvJrTQwe3wvJnwTdl92AonY36w/25g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "cpu": [ "ia32" ], @@ -3742,9 +2872,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.4.tgz", - "integrity": "sha512-cSD2gzCK5LuVX+hszzXQzlWya6c7hilO71L9h4KHwqI4qeqZ57bAtkgcC2YioXjsbfAv4lPn3qe3b00Zt+jIfQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "cpu": [ "loong64" ], @@ -3757,9 +2887,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.4.tgz", - "integrity": "sha512-qtzAd3BJh7UdbiXCrg6npWLYU0YpufsV9XlufKhMhYMJGJCdfX/G6+PNd0+v877X1JG5VmjBLUiFB0o8EUSicA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "cpu": [ "mips64el" ], @@ -3772,9 +2902,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.4.tgz", - "integrity": "sha512-yB8AYzOTaL0D5+2a4xEy7OVvbcypvDR05MsB/VVPVA7nL4hc5w5Dyd/ddnayStDgJE59fAgNEOdLhBxjfx5+dg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "cpu": [ "ppc64" ], @@ -3787,9 +2917,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.4.tgz", - "integrity": "sha512-Y5AgOuVzPjQdgU59ramLoqSSiXddu7F3F+LI5hYy/d1UHN7K5oLzYBDZe23QmQJ9PIVUXwOdKJ/jZahPdxzm9w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "cpu": [ "riscv64" ], @@ -3802,9 +2932,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.4.tgz", - "integrity": "sha512-Iqc/l/FFwtt8FoTK9riYv9zQNms7B8u+vAI/rxKuN10HgQIXaPzKZc479lZ0x6+vKVQbu55GdpYpeNWzjOhgbA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "cpu": [ "s390x" ], @@ -3817,9 +2947,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.4.tgz", - "integrity": "sha512-Td9jv782UMAFsuLZINfUpoF5mZIbAj+jv1YVtE58rFtfvoKRiKSkRGQfHTgKamLVT/fO7203bHa3wU122V/Bdg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "cpu": [ "x64" ], @@ -3832,9 +2962,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.4.tgz", - "integrity": "sha512-Awn38oSXxsPMQxaV0Ipb7W/gxZtk5Tx3+W+rAPdZkyEhQ6968r9NvtkjhnhbEgWXYbgV+JEONJ6PcdBS+nlcpA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "cpu": [ "x64" ], @@ -3847,9 +2977,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.4.tgz", - "integrity": "sha512-IsUmQeCY0aU374R82fxIPu6vkOybWIMc3hVGZ3ChRwL9hA1TwY+tS0lgFWV5+F1+1ssuvvXt3HFqe8roCip8Hg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "cpu": [ "x64" ], @@ -3862,9 +2992,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.4.tgz", - "integrity": "sha512-hsKhgZ4teLUaDA6FG/QIu2q0rI6I36tZVfM4DBZv3BG0mkMIdEnMbhc4xwLvLJSS22uWmaVkFkqWgIS0gPIm+A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "cpu": [ "x64" ], @@ -3877,9 +3007,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.4.tgz", - "integrity": "sha512-UUfMgMoXPoA/bvGUNfUBFLCh0gt9dxZYIx9W4rfJr7+hKe5jxxHmfOK8YSH4qsHLLN4Ck8JZ+v7Q5fIm1huErg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "cpu": [ "arm64" ], @@ -3892,9 +3022,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.4.tgz", - "integrity": "sha512-yIxbspZb5kGCAHWm8dexALQ9en1IYDfErzjSEq1KzXFniHv019VT3mNtTK7t8qdy4TwT6QYHI9sEZabONHg+aw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "cpu": [ "ia32" ], @@ -3907,9 +3037,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.4.tgz", - "integrity": "sha512-sywLRD3UK/qRJt0oBwdpYLBibk7KiRfbswmWRDabuncQYSlf8aLEEUor/oP6KRz8KEG+HoiVLBhPRD5JWjS8Sg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], @@ -5921,11 +5051,11 @@ "dev": true }, "node_modules/@smithy/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-p6GlFGBt9K4MYLu72YuJ523NVR4A8oHlC5M2JO6OmQqN8kAc/uh1JqLE+FizTokrSJGg0CSvC+BrsmGzKtsZKA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.0.1.tgz", + "integrity": "sha512-Jb7jg4E+C+uvrUQi+h9kbILY6ts6fglKZzseMCHlH9ayq+1f5QdpYf8MV/xppuiN6DAMJAmwGz53GwP3213dmA==", "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -5933,14 +5063,14 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.1.tgz", - "integrity": "sha512-hbkYJc20SBDz2qqLzttjI/EqXemtmWk0ooRznLsiXp3066KQRTvuKHa7U4jCZCJq6Dozqvy0R1/vNESC9inPJg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.2.tgz", + "integrity": "sha512-wUyG6ezpp2sWAvfqmSYTROwFUmJqKV78GLf55WODrosBcT0BAMd9bOLO4HRhynWBgAobPml2cF9ZOdgCe00r+g==", "dependencies": { - "@smithy/node-config-provider": "^3.1.0", - "@smithy/types": "^3.0.0", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/types": "^3.1.0", "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", + "@smithy/util-middleware": "^3.0.1", "tslib": "^2.6.2" }, "engines": { @@ -5948,17 +5078,17 @@ } }, "node_modules/@smithy/core": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.2.0.tgz", - "integrity": "sha512-ygLZSSKgt9bR8HAxR9mK+U5obvAJBr6zlQuhN5soYWx/amjDoQN4dTkydTypgKe6rIbUjTILyLU+W5XFwXr4kg==", - "dependencies": { - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.2.1.tgz", + "integrity": "sha512-R8Pzrr2v2oGUoj4CTZtKPr87lVtBsz7IUBGhSwS1kc6Cj0yPwNdYbkzhFsxhoDE9+BPl09VN/6rFsW9GJzWnBA==", + "dependencies": { + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-retry": "^3.0.4", + "@smithy/middleware-serde": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/util-middleware": "^3.0.1", "tslib": "^2.6.2" }, "engines": { @@ -5966,14 +5096,14 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.0.tgz", - "integrity": "sha512-q4A4d38v8pYYmseu/jTS3Z5I3zXlEOe5Obi+EJreVKgSVyWUHOd7/yaVCinC60QG4MRyCs98tcxBH1IMC0bu7Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.1.tgz", + "integrity": "sha512-htndP0LwHdE3R3Nam9ZyVWhwPYOmD4xCL79kqvNxy8u/bv0huuy574CSiRY4cvEICgimv8jlVfLeZ7zZqbnB2g==", "dependencies": { - "@smithy/node-config-provider": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", "tslib": "^2.6.2" }, "engines": { @@ -5981,23 +5111,23 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.0.0.tgz", - "integrity": "sha512-PUtyEA0Oik50SaEFCZ0WPVtF9tz/teze2fDptW6WRXl+RrEenH8UbEjudOz8iakiMl3lE3lCVqYf2Y+znL8QFQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.0.tgz", + "integrity": "sha512-XFDl70ZY+FabSnTX3oQGGYvdbEaC8vPEFkCEOoBkumqaZIwR1WjjJCDu2VMXlHbKWKshefWXdT0NYteL5v6uFw==", "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^3.0.0", + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^3.1.0", "@smithy/util-hex-encoding": "^3.0.0", "tslib": "^2.6.2" } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.0.tgz", - "integrity": "sha512-NB7AFiPN4NxP/YCAnrvYR18z2/ZsiHiF7VtG30gshO9GbFrIb1rC8ep4NGpJSWrz6P64uhPXeo4M0UsCLnZKqw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.2.tgz", + "integrity": "sha512-6147vdedQGaWn3Nt4P1KV0LuV8IH4len1SAeycyko0p8oRLWFyYyx0L8JHGclePDSphkjxZqBHtyIfyupCaTGg==", "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.0", - "@smithy/types": "^3.0.0", + "@smithy/eventstream-serde-universal": "^3.0.2", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -6005,11 +5135,11 @@ } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.0.tgz", - "integrity": "sha512-RUQG3vQ3LX7peqqHAbmayhgrF5aTilPnazinaSGF1P0+tgM3vvIRWPHmlLIz2qFqB9LqFIxditxc8O2Z6psrRw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.1.tgz", + "integrity": "sha512-6+B8P+5Q1mll4u7IoI7mpmYOSW3/c2r3WQoYLdqOjbIKMixJFGmN79ZjJiNMy4X2GZ4We9kQ6LfnFuczSlhcyw==", "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -6017,12 +5147,12 @@ } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.0.tgz", - "integrity": "sha512-baRPdMBDMBExZXIUAoPGm/hntixjt/VFpU6+VmCyiYJYzRHRxoaI1MN+5XE+hIS8AJ2GCHLMFEIOLzq9xx1EgQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.2.tgz", + "integrity": "sha512-DLtmGAfqxZAql8rB+HqyPlUne22u3EEVj+hxlUjgXk0hXt+SfLGK0ljzRFmiWQ3qGpHu1NdJpJA9e5JE/dJxFw==", "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.0", - "@smithy/types": "^3.0.0", + "@smithy/eventstream-serde-universal": "^3.0.2", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -6030,12 +5160,12 @@ } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.0.tgz", - "integrity": "sha512-HNFfShmotWGeAoW4ujP8meV9BZavcpmerDbPIjkJbxKbN8RsUcpRQ/2OyIxWNxXNH2GWCAxuSB7ynmIGJlQ3Dw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.2.tgz", + "integrity": "sha512-d3SgAIQ/s4EbU8HAHJ8m2MMJPAL30nqJktyVgvqZWNznA8PJl61gJw5gj/yjIt/Fvs3d4fU8FmPPAhdp2yr/7A==", "dependencies": { - "@smithy/eventstream-codec": "^3.0.0", - "@smithy/types": "^3.0.0", + "@smithy/eventstream-codec": "^3.1.0", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -6043,23 +5173,23 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.0.1.tgz", - "integrity": "sha512-uaH74i5BDj+rBwoQaXioKpI0SHBJFtOVwzrCpxZxphOW0ki5jhj7dXvDMYM2IJem8TpdFvS2iC08sjOblfFGFg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.0.2.tgz", + "integrity": "sha512-0nW6tLK0b7EqSsfKvnOmZCgJqnodBAnvqcrlC5dotKfklLedPTRGsQamSVbVDWyuU/QGg+YbZDJUQ0CUufJXZQ==", "dependencies": { - "@smithy/protocol-http": "^4.0.0", - "@smithy/querystring-builder": "^3.0.0", - "@smithy/types": "^3.0.0", + "@smithy/protocol-http": "^4.0.1", + "@smithy/querystring-builder": "^3.0.1", + "@smithy/types": "^3.1.0", "@smithy/util-base64": "^3.0.0", "tslib": "^2.6.2" } }, "node_modules/@smithy/hash-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.0.tgz", - "integrity": "sha512-84qXstNemP3XS5jcof0el6+bDfjzuvhJPQTEfro3lgtbCtKgzPm3MgiS6ehXVPjeQ5+JS0HqmTz8f/RYfzHVxw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.1.tgz", + "integrity": "sha512-w2ncjgk2EYO2+WhAsSQA8owzoOSY7IL1qVytlwpnL1pFGWTjIoIh5nROkEKXY51unB63bMGZqDiVoXaFbyKDlg==", "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.1.0", "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" @@ -6069,11 +5199,11 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.0.tgz", - "integrity": "sha512-F6wBBaEFgJzj0s4KUlliIGPmqXemwP6EavgvDqYwCH40O5Xr2iMHvS8todmGVZtuJCorBkXsYLyTu4PuizVq5g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.1.tgz", + "integrity": "sha512-RSNF/32BKygXKKMyS7koyuAq1rcdW5p5c4EFa77QenBFze9As+JiRnV9OWBh2cB/ejGZalEZjvIrMLHwJl7aGA==", "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" } }, @@ -6089,17 +5219,17 @@ } }, "node_modules/@smithy/middleware-compression": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-compression/-/middleware-compression-3.0.1.tgz", - "integrity": "sha512-MG3VAB5X7ftkuQo+VPh3hOA7uzQLUhymX2a7pe8evs6X08MaaDwiz5sMZByGJvk/HUNn3U70Mto59AHjp1htFw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-compression/-/middleware-compression-3.0.2.tgz", + "integrity": "sha512-5G1L5sMHHhMZKDA/t9fQiHrsCE1fniOQEPJWA01mlNHVoksTtLmY+nIncMsUNxunsB6hfoGopFldvtTwwRNqKw==", "dev": true, "dependencies": { "@smithy/is-array-buffer": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", + "@smithy/util-middleware": "^3.0.1", "@smithy/util-utf8": "^3.0.0", "fflate": "0.8.1", "tslib": "^2.6.2" @@ -6109,12 +5239,12 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.0.tgz", - "integrity": "sha512-3C4s4d/iGobgCtk2tnWW6+zSTOBg1PRAm2vtWZLdriwTroFbbWNSr3lcyzHdrQHnEXYCC5K52EbpfodaIUY8sg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.1.tgz", + "integrity": "sha512-6QdK/VbrCfXD5/QolE2W/ok6VqxD+SM28Ds8iSlEHXZwv4buLsvWyvoEEy0322K/g5uFgPzBmZjGqesTmPL+yQ==", "dependencies": { - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -6122,16 +5252,16 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.1.tgz", - "integrity": "sha512-lQ/UOdGD4KM5kLZiAl0q8Qy3dPbynvAXKAdXnYlrA1OpaUwr+neSsVokDZpY6ZVb5Yx8jnus29uv6XWpM9P4SQ==", - "dependencies": { - "@smithy/middleware-serde": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.2.tgz", + "integrity": "sha512-gWEaGYB3Bei17Oiy/F2IlUPpBazNXImytoOdJ1xbrUOaJKAOiUhx8/4FOnYLLJHdAwa9PlvJ2ULda2f/Dnwi9w==", + "dependencies": { + "@smithy/middleware-serde": "^3.0.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", + "@smithy/url-parser": "^3.0.1", + "@smithy/util-middleware": "^3.0.1", "tslib": "^2.6.2" }, "engines": { @@ -6139,17 +5269,17 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.3.tgz", - "integrity": "sha512-Wve1qzJb83VEU/6q+/I0cQdAkDnuzELC6IvIBwDzUEiGpKqXgX1v10FUuZGbRS6Ov/P+HHthcAoHOJZQvZNAkA==", - "dependencies": { - "@smithy/node-config-provider": "^3.1.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/service-error-classification": "^3.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.4.tgz", + "integrity": "sha512-Tu+FggbLNF5G9L6Wi8o32Mg4bhlBInWlhhaFKyytGRnkfxGopxFVXJQn7sjZdFYJyTz6RZZa06tnlvavUgtoVg==", + "dependencies": { + "@smithy/node-config-provider": "^3.1.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/service-error-classification": "^3.0.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", + "@smithy/util-middleware": "^3.0.1", + "@smithy/util-retry": "^3.0.1", "tslib": "^2.6.2", "uuid": "^9.0.1" }, @@ -6157,23 +5287,12 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/service-error-classification": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.0.tgz", - "integrity": "sha512-3BsBtOUt2Gsnc3X23ew+r2M71WwtpHfEDGhHYHSDg6q1t8FrWh15jT25DLajFV1H+PpxAJ6gqe9yYeRUsmSdFA==", - "dependencies": { - "@smithy/types": "^3.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/@smithy/middleware-serde": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.0.tgz", - "integrity": "sha512-I1vKG1foI+oPgG9r7IMY1S+xBnmAn1ISqployvqkwHoSb8VPsngHDTOgYGYBonuOKndaWRUGJZrKYYLB+Ane6w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.1.tgz", + "integrity": "sha512-ak6H/ZRN05r5+SR0/IUc5zOSyh2qp3HReg1KkrnaSLXmncy9lwOjNqybX4L4x55/e5mtVDn1uf/gQ6bw5neJPw==", "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -6181,11 +5300,11 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.0.tgz", - "integrity": "sha512-+H0jmyfAyHRFXm6wunskuNAqtj7yfmwFB6Fp37enytp2q047/Od9xetEaUbluyImOlGnGpaVGaVfjwawSr+i6Q==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.1.tgz", + "integrity": "sha512-fS5uT//y1SlBdkzIvgmWQ9FufwMXrHSSbuR25ygMy1CRDIZkcBMoF4oTMYNfR9kBlVBcVzlv7joFdNrFuQirPA==", "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -6193,13 +5312,13 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.0.tgz", - "integrity": "sha512-ngfB8QItUfTFTfHMvKuc2g1W60V1urIgZHqD1JNFZC2tTWXahqf2XvKXqcBS7yZqR7GqkQQZy11y/lNOUWzq7Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.1.tgz", + "integrity": "sha512-z5G7+ysL4yUtMghUd2zrLkecu0mTfnYlt5dR76g/HsFqf7evFazwiZP1ag2EJenGxNBDwDM5g8nm11NPogiUVA==", "dependencies": { - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/shared-ini-file-loader": "^3.1.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -6207,14 +5326,14 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.0.0.tgz", - "integrity": "sha512-3trD4r7NOMygwLbUJo4eodyQuypAWr7uvPnebNJ9a70dQhVn+US8j/lCnvoJS6BXfZeF7PkkkI0DemVJw+n+eQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.0.1.tgz", + "integrity": "sha512-hlBI6MuREA4o1wBMEt+QNhUzoDtFFvwR6ecufimlx9D79jPybE/r8kNorphXOi91PgSO9S2fxRjcKCLk7Jw8zA==", "dependencies": { - "@smithy/abort-controller": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/querystring-builder": "^3.0.0", - "@smithy/types": "^3.0.0", + "@smithy/abort-controller": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/querystring-builder": "^3.0.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -6222,11 +5341,11 @@ } }, "node_modules/@smithy/property-provider": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.0.tgz", - "integrity": "sha512-Tj3+oVhqdZgemjCiWjFlADfhvLF4C/uKDuKo7/tlEsRQ9+3emCreR2xndj970QSRSsiCEU8hZW3/8JQu+n5w4Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.1.tgz", + "integrity": "sha512-YknOMZcQkB5on+MU0DvbToCmT2YPtTETMXW0D3+/Iln7ezT+Zm1GMHhCW1dOH/X/+LkkQD9aXEoCX/B10s4Xdw==", "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -6234,11 +5353,11 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.0.tgz", - "integrity": "sha512-qOQZOEI2XLWRWBO9AgIYuHuqjZ2csyr8/IlgFDHDNuIgLAMRx2Bl8ck5U5D6Vh9DPdoaVpuzwWMa0xcdL4O/AQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.1.tgz", + "integrity": "sha512-eBhm9zwcFPEazc654c0BEWtxYAzrw+OhoSf5pkwKzfftWKXRoqEhwOE2Pvn30v0iAdo7Mfsfb6pi1NnZlGCMpg==", "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -6246,11 +5365,11 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.0.tgz", - "integrity": "sha512-bW8Fi0NzyfkE0TmQphDXr1AmBDbK01cA4C1Z7ggwMAU5RDz5AAv/KmoRwzQAS0kxXNf/D2ALTEgwK0U2c4LtRg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.1.tgz", + "integrity": "sha512-vKitpnG/2KOMVlx3x1S3FkBH075EROG3wcrcDaNerQNh8yuqnSL23btCD2UyX4i4lpPzNW6VFdxbn2Z25b/g5Q==", "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.1.0", "@smithy/util-uri-escape": "^3.0.0", "tslib": "^2.6.2" }, @@ -6259,23 +5378,34 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.0.tgz", - "integrity": "sha512-UzHwthk0UEccV4dHzPySnBy34AWw3V9lIqUTxmozQ+wPDAO9csCWMfOLe7V9A2agNYy7xE+Pb0S6K/J23JSzfQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.1.tgz", + "integrity": "sha512-Qt8DMC05lVS8NcQx94lfVbZSX+2Ym7032b/JR8AlboAa/D669kPzqb35dkjkvAG6+NWmUchef3ENtrD6F+5n8Q==", "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, + "node_modules/@smithy/service-error-classification": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.1.tgz", + "integrity": "sha512-ubFUvIePjDCyIzZ+pLETqNC6KXJ/fc6g+/baqel7Zf6kJI/kZKgjwkCI7zbUhoUuOZ/4eA/87YasVu40b/B4bA==", + "dependencies": { + "@smithy/types": "^3.1.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.0.tgz", - "integrity": "sha512-dAM7wSX0NR3qTNyGVN/nwwpEDzfV9T/3AN2eABExWmda5VqZKSsjlINqomO5hjQWGv+IIkoXfs3u2vGSNz8+Rg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.1.tgz", + "integrity": "sha512-nD6tXIX2126/P9e3wqRY1bm9dTtPZwRDyjVOd18G28o+1UOG+kOVgUwujE795HslSuPlEgqzsH5sgNP1hDjj9g==", "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -6283,14 +5413,14 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-3.0.0.tgz", - "integrity": "sha512-kXFOkNX+BQHe2qnLxpMEaCRGap9J6tUGLzc3A9jdn+nD4JdMwCKTJ+zFwQ20GkY+mAXGatyTw3HcoUlR39HwmA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-3.1.0.tgz", + "integrity": "sha512-m0/6LW3IQ3/JBcdhqjpkpABPTPhcejqeAn0U877zxBdNLiWAnG2WmCe5MfkUyVuvpFTPQnQwCo/0ZBR4uF5kxg==", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.1.0", "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", + "@smithy/util-middleware": "^3.0.1", "@smithy/util-uri-escape": "^3.0.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" @@ -6300,15 +5430,15 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.1.tgz", - "integrity": "sha512-tj4Ku7MpzZR8cmVuPcSbrLFVxmptWktmJMwST/uIEq4sarabEdF8CbmQdYB7uJ/X51Qq2EYwnRsoS7hdR4B7rA==", - "dependencies": { - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-stream": "^3.0.1", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.2.tgz", + "integrity": "sha512-f3eQpczBOFUtdT/ptw2WpUKu1qH1K7xrssrSiHYtd9TuLXkvFqb88l9mz9FHeUVNSUxSnkW1anJnw6rLwUKzQQ==", + "dependencies": { + "@smithy/middleware-endpoint": "^3.0.2", + "@smithy/middleware-stack": "^3.0.1", + "@smithy/protocol-http": "^4.0.1", + "@smithy/types": "^3.1.0", + "@smithy/util-stream": "^3.0.2", "tslib": "^2.6.2" }, "engines": { @@ -6316,9 +5446,9 @@ } }, "node_modules/@smithy/types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.0.0.tgz", - "integrity": "sha512-VvWuQk2RKFuOr98gFhjca7fkBS+xLLURT8bUjk5XQoV0ZLm7WPwWPPY3/AwzTLuUBDeoKDCthfe1AsTUWaSEhw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.1.0.tgz", + "integrity": "sha512-qi4SeCVOUPjhSSZrxxB/mB8DrmuSFUcJnD9KXjuP+7C3LV/KFV4kpuUSH3OHDZgQB9TEH/1sO/Fq/5HyaK9MPw==", "dependencies": { "tslib": "^2.6.2" }, @@ -6327,12 +5457,12 @@ } }, "node_modules/@smithy/url-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.0.tgz", - "integrity": "sha512-2XLazFgUu+YOGHtWihB3FSLAfCUajVfNBXGGYjOaVKjLAuAxx3pSBY3hBgLzIgB17haf59gOG3imKqTy8mcrjw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.1.tgz", + "integrity": "sha512-G140IlNFlzYWVCedC4E2d6NycM1dCUbe5CnsGW1hmGt4hYKiGOw0v7lVru9WAn5T2w09QEjl4fOESWjGmCvVmg==", "dependencies": { - "@smithy/querystring-parser": "^3.0.0", - "@smithy/types": "^3.0.0", + "@smithy/querystring-parser": "^3.0.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" } }, @@ -6392,13 +5522,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.3.tgz", - "integrity": "sha512-3DFON2bvXJAukJe+qFgPV/rorG7ZD3m4gjCXHD1V5z/tgKQp5MCTCLntrd686tX6tj8Uli3lefWXJudNg5WmCA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.4.tgz", + "integrity": "sha512-sXtin3Mue3A3xo4+XkozpgPptgmRwvNPOqTvb3ANGTCzzoQgAPBNjpE+aXCINaeSMXwHmv7E2oEn2vWdID+SAQ==", "dependencies": { - "@smithy/property-provider": "^3.1.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", + "@smithy/property-provider": "^3.1.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", "bowser": "^2.11.0", "tslib": "^2.6.2" }, @@ -6407,16 +5537,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.3.tgz", - "integrity": "sha512-D0b8GJXecT00baoSQ3Iieu3k3mZ7GY8w1zmg8pdogYrGvWJeLcIclqk2gbkG4K0DaBGWrO6v6r20iwIFfDYrmA==", - "dependencies": { - "@smithy/config-resolver": "^3.0.1", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.4.tgz", + "integrity": "sha512-CUF6TyxLh3CgBRVYgZNOPDfzHQjeQr0vyALR6/DkQkOm7rNfGEzW1BRFi88C73pndmfvoiIT7ochuT76OPz9Dw==", + "dependencies": { + "@smithy/config-resolver": "^3.0.2", + "@smithy/credential-provider-imds": "^3.1.1", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/property-provider": "^3.1.1", + "@smithy/smithy-client": "^3.1.2", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -6424,12 +5554,12 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.1.tgz", - "integrity": "sha512-ZRT0VCOnKlVohfoABMc8lWeQo/JEFuPWctfNRXgTHbyOVssMOLYFUNWukxxiHRGVAhV+n3c0kPW+zUqckjVPEA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.2.tgz", + "integrity": "sha512-4zFOcBFQvifd2LSD4a1dKvfIWWwh4sWNtS3oZ7mpob/qPPmJseqKB148iT+hWCDsG//TmI+8vjYPgZdvnkYlTg==", "dependencies": { - "@smithy/node-config-provider": "^3.1.0", - "@smithy/types": "^3.0.0", + "@smithy/node-config-provider": "^3.1.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -6448,11 +5578,11 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.0.tgz", - "integrity": "sha512-q5ITdOnV2pXHSVDnKWrwgSNTDBAMHLptFE07ua/5Ty5WJ11bvr0vk2a7agu7qRhrCFRQlno5u3CneU5EELK+DQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.1.tgz", + "integrity": "sha512-WRODCQtUsO7vIvfrdxS8RFPeLKcewYtaCglZsBsedIKSUGIIvMlZT5oh+pCe72I+1L+OjnZuqRNpN2LKhWA4KQ==", "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -6460,37 +5590,26 @@ } }, "node_modules/@smithy/util-retry": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.0.tgz", - "integrity": "sha512-nK99bvJiziGv/UOKJlDvFF45F00WgPLKVIGUfAK+mDhzVN2hb/S33uW2Tlhg5PVBoqY7tDVqL0zmu4OxAHgo9g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.1.tgz", + "integrity": "sha512-5lRtYm+8fNFEUTdqZXg5M4ppVp40rMIJfR1TpbHAhKQgPIDpWT+iYMaqgnwEbtpi9U1smyUOPv5Sg+M1neOBgw==", "dependencies": { - "@smithy/service-error-classification": "^3.0.0", - "@smithy/types": "^3.0.0", + "@smithy/service-error-classification": "^3.0.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-retry/node_modules/@smithy/service-error-classification": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.0.tgz", - "integrity": "sha512-3BsBtOUt2Gsnc3X23ew+r2M71WwtpHfEDGhHYHSDg6q1t8FrWh15jT25DLajFV1H+PpxAJ6gqe9yYeRUsmSdFA==", - "dependencies": { - "@smithy/types": "^3.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/@smithy/util-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.0.1.tgz", - "integrity": "sha512-7F7VNNhAsfMRA8I986YdOY5fE0/T1/ZjFF6OLsqkvQVNP3vZ/szYDfGCyphb7ioA09r32K/0qbSFfNFU68aSzA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.0.2.tgz", + "integrity": "sha512-n5Obp5AnlI6qHo8sbupwrcpBe6vFp4qkl0SRNuExKPNrH3ABAMG2ZszRTIUIv2b4AsFrCO+qiy4uH1Q3z1dxTA==", "dependencies": { - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/types": "^3.0.0", + "@smithy/fetch-http-handler": "^3.0.2", + "@smithy/node-http-handler": "^3.0.1", + "@smithy/types": "^3.1.0", "@smithy/util-base64": "^3.0.0", "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-hex-encoding": "^3.0.0", @@ -6525,12 +5644,12 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.0.0.tgz", - "integrity": "sha512-+fEXJxGDLCoqRKVSmo0auGxaqbiCo+8oph+4auefYjaNxjOLKSY2MxVQfRzo65PaZv4fr+5lWg+au7vSuJJ/zw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.0.1.tgz", + "integrity": "sha512-wwnrVQdjQxvWGOAiLmqlEhENGCcDIN+XJ/+usPOgSZObAslrCXgKlkX7rNVwIWW2RhPguTKthvF+4AoO0Z6KpA==", "dependencies": { - "@smithy/abort-controller": "^3.0.0", - "@smithy/types": "^3.0.0", + "@smithy/abort-controller": "^3.0.1", + "@smithy/types": "^3.1.0", "tslib": "^2.6.2" }, "engines": { @@ -6589,9 +5708,9 @@ } }, "node_modules/@types/aws-lambda": { - "version": "8.10.138", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.138.tgz", - "integrity": "sha512-71EHMl70TPWIAsFuHd85NHq6S6T2OOjiisPTrH7RgcjzpJpPh4RQJv7PvVvIxc6PIp8CLV7F9B+TdjcAES5vcA==", + "version": "8.10.140", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.140.tgz", + "integrity": "sha512-4Dh3dk2TUcbdfHrX0Al90mNGJDvA9NBiTQPzbrjGi/dLxzKCGOYgT8YQ47jUKNFALkAJAadifq0pzyjIUlhVhg==", "dev": true }, "node_modules/@types/babel__core": { @@ -6726,9 +5845,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.14.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", - "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "version": "20.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", + "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", "dependencies": { "undici-types": "~5.26.4" } @@ -7448,9 +6567,9 @@ } }, "node_modules/aws-cdk": { - "version": "2.145.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.145.0.tgz", - "integrity": "sha512-Jdw7nbrXiihYM/jReXK0/i8a+W/o+fLcn1f8Yzvns1jP58KBGQygqyiv5Dm+uqzS3D8/ZZnfPu3ph6aOVLPNSA==", + "version": "2.146.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.146.0.tgz", + "integrity": "sha512-uLotAflIqQn8rskLC1r2NGNMaTwDgW8Vq016QiACmatIcp2n/hfNlwazg+hRlSzq2FwGda6Qht2aOlsGm0QcBw==", "bin": { "cdk": "bin/cdk" }, @@ -7462,9 +6581,9 @@ } }, "node_modules/aws-cdk-lib": { - "version": "2.145.0", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.145.0.tgz", - "integrity": "sha512-0RCKdojCtF74rI2gGi9KUFVUKykTIMEs3ANjruIjxEz6d2cAsy9c2k+nCCSMdqhKZ9aPJgmBFewiw03Z8NtPig==", + "version": "2.146.0", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.146.0.tgz", + "integrity": "sha512-W3F2zH+P7hUxmu2dlEKJBBi6Twc4//NsJJW00h2LN0dKU+2302QY8jR+P7jgEYzZ7U50phtH4zO6BPmJrhLVEg==", "bundleDependencies": [ "@balena/dockerignore", "case", @@ -7490,7 +6609,7 @@ "mime-types": "^2.1.35", "minimatch": "^3.1.2", "punycode": "^2.3.1", - "semver": "^7.6.0", + "semver": "^7.6.2", "table": "^6.8.2", "yaml": "1.10.2" }, @@ -7507,7 +6626,7 @@ "license": "Apache-2.0" }, "node_modules/aws-cdk-lib/node_modules/ajv": { - "version": "8.13.0", + "version": "8.16.0", "inBundle": true, "license": "MIT", "dependencies": { @@ -7667,17 +6786,6 @@ "inBundle": true, "license": "MIT" }, - "node_modules/aws-cdk-lib/node_modules/lru-cache": { - "version": "6.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/aws-cdk-lib/node_modules/mime-db": { "version": "1.52.0", "inBundle": true, @@ -7725,12 +6833,9 @@ } }, "node_modules/aws-cdk-lib/node_modules/semver": { - "version": "7.6.0", + "version": "7.6.2", "inBundle": true, "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -7809,11 +6914,6 @@ "punycode": "^2.1.0" } }, - "node_modules/aws-cdk-lib/node_modules/yallist": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC" - }, "node_modules/aws-cdk-lib/node_modules/yaml": { "version": "1.10.2", "inBundle": true, @@ -7823,9 +6923,9 @@ } }, "node_modules/aws-sdk": { - "version": "2.1639.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1639.0.tgz", - "integrity": "sha512-3vi9ONXhROfXTjsulFurKtJ/vBjiXirhwrRY6C7QRJyI/+m9lphtBivSYynnu7q2saAqC9ArlkEWQLRFUPy+Zg==", + "version": "2.1648.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1648.0.tgz", + "integrity": "sha512-E2QmoQVUBuKDCIZwn3u4DNrZHScKuEaJ8dUYquov1lhQtKVZDBgaQmcJ9/58sUbgupPpc6Q1F/eYLOgVyNSjRQ==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -9605,9 +8705,9 @@ } }, "node_modules/esbuild": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.4.tgz", - "integrity": "sha512-sFMcNNrj+Q0ZDolrp5pDhH0nRPN9hLIM3fRPwgbLYJeSHHgnXSnbV3xYgSVuOeLWH9c73VwmEverVzupIv5xuA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -9616,29 +8716,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.4", - "@esbuild/android-arm": "0.21.4", - "@esbuild/android-arm64": "0.21.4", - "@esbuild/android-x64": "0.21.4", - "@esbuild/darwin-arm64": "0.21.4", - "@esbuild/darwin-x64": "0.21.4", - "@esbuild/freebsd-arm64": "0.21.4", - "@esbuild/freebsd-x64": "0.21.4", - "@esbuild/linux-arm": "0.21.4", - "@esbuild/linux-arm64": "0.21.4", - "@esbuild/linux-ia32": "0.21.4", - "@esbuild/linux-loong64": "0.21.4", - "@esbuild/linux-mips64el": "0.21.4", - "@esbuild/linux-ppc64": "0.21.4", - "@esbuild/linux-riscv64": "0.21.4", - "@esbuild/linux-s390x": "0.21.4", - "@esbuild/linux-x64": "0.21.4", - "@esbuild/netbsd-x64": "0.21.4", - "@esbuild/openbsd-x64": "0.21.4", - "@esbuild/sunos-x64": "0.21.4", - "@esbuild/win32-arm64": "0.21.4", - "@esbuild/win32-ia32": "0.21.4", - "@esbuild/win32-x64": "0.21.4" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/escalade": { @@ -11022,15 +10122,15 @@ "dev": true }, "node_modules/hashi-vault-js": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/hashi-vault-js/-/hashi-vault-js-0.4.14.tgz", - "integrity": "sha512-TUn4G7GYbARfYMfb/M24hjFdkqtSY9FKSw3yPvKM60CzdduNSaasZnlMNMoydo2khQH+4NoBWpApH5OiCT5nuw==", + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/hashi-vault-js/-/hashi-vault-js-0.4.15.tgz", + "integrity": "sha512-/kTjpcLU3KNg7FgDwc3gIql717kjee8Q3NZcUdqDY3FpA1TxbJnL5tJPs5P+i1sq2r3EJsqVLIimNTS0II7pIA==", "dev": true, "dependencies": { - "axios": "^1.5.0" + "axios": "^1.7.0" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/hasown": { @@ -13201,9 +12301,9 @@ } }, "node_modules/lint-staged": { - "version": "15.2.5", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.5.tgz", - "integrity": "sha512-j+DfX7W9YUvdzEZl3Rk47FhDF6xwDBV5wwsCPw6BwWZVPYJemusQmvb9bRsW23Sqsaa+vRloAWogbK4BUuU2zA==", + "version": "15.2.7", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.7.tgz", + "integrity": "sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==", "dev": true, "dependencies": { "chalk": "~5.3.0", @@ -18256,9 +17356,9 @@ } }, "node_modules/ts-jest": { - "version": "29.1.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.4.tgz", - "integrity": "sha512-YiHwDhSvCiItoAgsKtoLFCuakDzDsJ1DLDnSouTaTmdOcOwIkSzbLXduaQ6M5DRVhuZC/NYaaZ/mtHbWMv/S6Q==", + "version": "29.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.5.tgz", + "integrity": "sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==", "dev": true, "dependencies": { "bs-logger": "0.x", @@ -18383,9 +17483,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/tsx": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.15.1.tgz", - "integrity": "sha512-k/6h17jA1KfUR7SpcteOa880zGmF56s8gMIcSqUR5avyNFi9nlCEKpMiHLrzrqyARGr52A/JablmGey1DEWbCA==", + "version": "4.15.7", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.15.7.tgz", + "integrity": "sha512-u3H0iSFDZM3za+VxkZ1kywdCeHCn+8/qHQS1MNoO2sONDgD95HlWtt8aB23OzeTmFP9IU4/8bZUdg58Uu5J4cg==", "dev": true, "dependencies": { "esbuild": "~0.21.4", @@ -18762,14 +17862,23 @@ } }, "node_modules/typedoc-plugin-missing-exports": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-2.2.0.tgz", - "integrity": "sha512-2+XR1IcyQ5UwXZVJe9NE6HrLmNufT9i5OwoIuuj79VxuA3eYq+Y6itS9rnNV1D7UeQnUSH8kISYD73gHE5zw+w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-2.3.0.tgz", + "integrity": "sha512-iI9ITNNLlbsLCBBeYDyu0Qqp3GN/9AGyWNKg8bctRXuZEPT7G1L+0+MNWG9MsHcf/BFmNbXL0nQ8mC/tXRicog==", "dev": true, "peerDependencies": { "typedoc": "0.24.x || 0.25.x" } }, + "node_modules/typedoc-plugin-zod": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/typedoc-plugin-zod/-/typedoc-plugin-zod-1.1.2.tgz", + "integrity": "sha512-jsmuYg1xsGjwKdhKN4tgRYORnbKpU7v5B1ZpsazMH5lUsI6ZLxBqAY5iiZ06oz/01gHOsAdhpABgWD97MOjKQA==", + "dev": true, + "peerDependencies": { + "typedoc": "0.23.x || 0.24.x || 0.25.x" + } + }, "node_modules/typescript": { "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", @@ -19377,7 +18486,7 @@ }, "packages/batch": { "name": "@aws-lambda-powertools/batch", - "version": "2.2.0", + "version": "2.3.0", "license": "MIT-0", "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing" @@ -19385,7 +18494,7 @@ }, "packages/commons": { "name": "@aws-lambda-powertools/commons", - "version": "2.2.0", + "version": "2.3.0", "license": "MIT-0", "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing" @@ -19393,16 +18502,16 @@ }, "packages/idempotency": { "name": "@aws-lambda-powertools/idempotency", - "version": "2.2.0", + "version": "2.3.0", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.2.0", - "@aws-lambda-powertools/jmespath": "^2.2.0" + "@aws-lambda-powertools/commons": "^2.3.0", + "@aws-lambda-powertools/jmespath": "^2.3.0" }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.596.0", - "@aws-sdk/lib-dynamodb": "^3.596.0", + "@aws-sdk/client-dynamodb": "^3.602.0", + "@aws-sdk/lib-dynamodb": "^3.602.0", "aws-sdk-client-mock": "^4.0.1", "aws-sdk-client-mock-jest": "^4.0.1" }, @@ -19425,18 +18534,18 @@ }, "packages/jmespath": { "name": "@aws-lambda-powertools/jmespath", - "version": "2.2.0", + "version": "2.3.0", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.2.0" + "@aws-lambda-powertools/commons": "^2.3.0" } }, "packages/logger": { "name": "@aws-lambda-powertools/logger", - "version": "2.2.0", + "version": "2.3.0", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.2.0", + "@aws-lambda-powertools/commons": "^2.3.0", "lodash.merge": "^4.6.2" }, "devDependencies": { @@ -19454,14 +18563,14 @@ }, "packages/metrics": { "name": "@aws-lambda-powertools/metrics", - "version": "2.2.0", + "version": "2.3.0", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.2.0" + "@aws-lambda-powertools/commons": "^2.3.0" }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-cloudwatch": "^3.596.0", + "@aws-sdk/client-cloudwatch": "^3.600.0", "@types/promise-retry": "^1.1.3", "promise-retry": "^2.0.1" }, @@ -19476,18 +18585,18 @@ }, "packages/parameters": { "name": "@aws-lambda-powertools/parameters", - "version": "2.2.0", + "version": "2.3.0", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.2.0" + "@aws-lambda-powertools/commons": "^2.3.0" }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-appconfigdata": "^3.596.0", - "@aws-sdk/client-dynamodb": "^3.596.0", - "@aws-sdk/client-secrets-manager": "^3.596.0", - "@aws-sdk/client-ssm": "^3.596.0", - "@aws-sdk/util-dynamodb": "^3.596.0", + "@aws-sdk/client-appconfigdata": "^3.600.0", + "@aws-sdk/client-dynamodb": "^3.602.0", + "@aws-sdk/client-secrets-manager": "^3.600.0", + "@aws-sdk/client-ssm": "^3.603.0", + "@aws-sdk/util-dynamodb": "^3.602.0", "@smithy/util-base64": "^3.0.0", "aws-sdk-client-mock": "^4.0.1", "aws-sdk-client-mock-jest": "^4.0.1" @@ -19523,7 +18632,7 @@ }, "packages/parser": { "name": "@aws-lambda-powertools/parser", - "version": "2.2.0", + "version": "2.3.0", "license": "MIT-0", "devDependencies": { "@anatine/zod-mock": "^3.13.3", @@ -19535,30 +18644,30 @@ }, "packages/testing": { "name": "@aws-lambda-powertools/testing-utils", - "version": "2.2.0", + "version": "2.3.0", "license": "MIT-0", "dependencies": { "@aws-cdk/cli-lib-alpha": "^2.121.1-alpha.0", - "@aws-sdk/client-lambda": "^3.596.0", + "@aws-sdk/client-lambda": "^3.600.0", "@smithy/util-utf8": "^3.0.0", - "aws-cdk-lib": "^2.145.0", - "esbuild": "^0.21.4" + "aws-cdk-lib": "^2.146.0", + "esbuild": "^0.21.5" } }, "packages/tracer": { "name": "@aws-lambda-powertools/tracer", - "version": "2.2.0", + "version": "2.3.0", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "^2.2.0", + "@aws-lambda-powertools/commons": "^2.3.0", "aws-xray-sdk-core": "^3.9.0" }, "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.596.0", - "@aws-sdk/client-xray": "^3.596.0", + "@aws-sdk/client-dynamodb": "^3.602.0", + "@aws-sdk/client-xray": "^3.600.0", "@types/promise-retry": "^1.1.6", - "aws-sdk": "^2.1639.0", + "aws-sdk": "^2.1648.0", "promise-retry": "^2.0.1" }, "peerDependencies": { diff --git a/package.json b/package.json index 3434672623..b65a04ab38 100644 --- a/package.json +++ b/package.json @@ -50,9 +50,9 @@ "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript#readme", "devDependencies": { "@middy/core": "^4.7.0", - "@types/aws-lambda": "^8.10.138", + "@types/aws-lambda": "^8.10.140", "@types/jest": "^29.5.12", - "@types/node": "^20.14.2", + "@types/node": "^20.14.9", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", "eslint": "^8.57.0", @@ -65,13 +65,14 @@ "jest": "^29.7.0", "jest-runner-groups": "^2.2.0", "lerna": "8.1.2", - "lint-staged": "^15.2.5", + "lint-staged": "^15.2.7", "markdownlint-cli2": "^0.13.0", "prettier": "^3.3.2", - "ts-jest": "^29.1.4", + "ts-jest": "^29.1.5", "ts-node": "^10.9.2", "typedoc": "^0.25.13", - "typedoc-plugin-missing-exports": "^2.2.0", + "typedoc-plugin-missing-exports": "^2.3.0", + "typedoc-plugin-zod": "^1.1.2", "typescript": "^5.4.5" }, "lint-staged": { diff --git a/packages/batch/CHANGELOG.md b/packages/batch/CHANGELOG.md index 9d3fa4dc86..a843399da9 100644 --- a/packages/batch/CHANGELOG.md +++ b/packages/batch/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. +# [2.3.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.2.0...v2.3.0) (2024-06-27) + +**Note:** Version bump only for package @aws-lambda-powertools/batch + + + + + # [2.2.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.1...v2.2.0) (2024-06-13) diff --git a/packages/batch/package.json b/packages/batch/package.json index 83c986fa0e..35f0d17ff8 100644 --- a/packages/batch/package.json +++ b/packages/batch/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/batch", - "version": "2.2.0", + "version": "2.3.0", "description": "The batch processing package for the Powertools for AWS Lambda (TypeScript) library.", "author": { "name": "Amazon Web Services", diff --git a/packages/commons/CHANGELOG.md b/packages/commons/CHANGELOG.md index 6fe2071bb9..f7cc929d04 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. +# [2.3.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.2.0...v2.3.0) (2024-06-27) + +**Note:** Version bump only for package @aws-lambda-powertools/commons + + + + + # [2.2.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.1...v2.2.0) (2024-06-13) **Note:** Version bump only for package @aws-lambda-powertools/commons diff --git a/packages/commons/package.json b/packages/commons/package.json index 9ca76b8194..24dae690e1 100644 --- a/packages/commons/package.json +++ b/packages/commons/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/commons", - "version": "2.2.0", + "version": "2.3.0", "description": "A shared utility package for Powertools for AWS Lambda (TypeScript) libraries", "author": { "name": "Amazon Web Services", diff --git a/packages/commons/src/version.ts b/packages/commons/src/version.ts index 688f810ada..5e61dc8fba 100644 --- a/packages/commons/src/version.ts +++ b/packages/commons/src/version.ts @@ -1,2 +1,2 @@ // this file is auto generated, do not modify -export const PT_VERSION = '2.2.0'; +export const PT_VERSION = '2.3.0'; diff --git a/packages/idempotency/CHANGELOG.md b/packages/idempotency/CHANGELOG.md index a19a2971c1..9db956f12f 100644 --- a/packages/idempotency/CHANGELOG.md +++ b/packages/idempotency/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. +# [2.3.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.2.0...v2.3.0) (2024-06-27) + + +### Bug Fixes + +* **idempotency:** preserve scope of decorated class ([#2693](https://github.com/aws-powertools/powertools-lambda-typescript/issues/2693)) ([22ec1f0](https://github.com/aws-powertools/powertools-lambda-typescript/commit/22ec1f005ae334577a2ee878a454527ad16a56d9)) + + + + + # [2.2.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.1...v2.2.0) (2024-06-13) diff --git a/packages/idempotency/package.json b/packages/idempotency/package.json index 9c1bfef916..3cd12d82df 100644 --- a/packages/idempotency/package.json +++ b/packages/idempotency/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/idempotency", - "version": "2.2.0", + "version": "2.3.0", "description": "The idempotency package for the Powertools for AWS Lambda (TypeScript) library. It provides options to make your Lambda functions idempotent and safe to retry.", "author": { "name": "Amazon Web Services", @@ -97,8 +97,8 @@ "url": "https://github.com/aws-powertools/powertools-lambda-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^2.2.0", - "@aws-lambda-powertools/jmespath": "^2.2.0" + "@aws-lambda-powertools/commons": "^2.3.0", + "@aws-lambda-powertools/jmespath": "^2.3.0" }, "peerDependencies": { "@aws-sdk/client-dynamodb": ">=3.x", @@ -126,8 +126,8 @@ ], "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.596.0", - "@aws-sdk/lib-dynamodb": "^3.596.0", + "@aws-sdk/client-dynamodb": "^3.602.0", + "@aws-sdk/lib-dynamodb": "^3.602.0", "aws-sdk-client-mock": "^4.0.1", "aws-sdk-client-mock-jest": "^4.0.1" } diff --git a/packages/idempotency/src/IdempotencyHandler.ts b/packages/idempotency/src/IdempotencyHandler.ts index a689153578..c016ec814e 100644 --- a/packages/idempotency/src/IdempotencyHandler.ts +++ b/packages/idempotency/src/IdempotencyHandler.ts @@ -1,3 +1,4 @@ +import type { Handler } from 'aws-lambda'; import type { JSONValue, MiddyLikeRequest, @@ -53,6 +54,12 @@ export class IdempotencyHandler { * Persistence layer used to store the idempotency records. */ readonly #persistenceStore: BasePersistenceLayer; + /** + * The `this` context to be used when calling the function. + * + * When decorating a class method, this will be the instance of the class. + */ + readonly #thisArg?: Handler; public constructor(options: IdempotencyHandlerOptions) { const { @@ -61,11 +68,13 @@ export class IdempotencyHandler { idempotencyConfig, functionArguments, persistenceStore, + thisArg, } = options; this.#functionToMakeIdempotent = functionToMakeIdempotent; this.#functionPayloadToBeHashed = functionPayloadToBeHashed; this.#idempotencyConfig = idempotencyConfig; this.#functionArguments = functionArguments; + this.#thisArg = thisArg; this.#persistenceStore = persistenceStore; @@ -121,7 +130,10 @@ export class IdempotencyHandler { public async getFunctionResult(): Promise> { let result; try { - result = await this.#functionToMakeIdempotent(...this.#functionArguments); + result = await this.#functionToMakeIdempotent.apply( + this.#thisArg, + this.#functionArguments + ); } catch (error) { await this.#deleteInProgressRecord(); throw error; @@ -149,7 +161,10 @@ export class IdempotencyHandler { public async handle(): Promise> { // early return if we should skip idempotency completely if (this.shouldSkipIdempotency()) { - return await this.#functionToMakeIdempotent(...this.#functionArguments); + return await this.#functionToMakeIdempotent.apply( + this.#thisArg, + this.#functionArguments + ); } let e; diff --git a/packages/idempotency/src/idempotencyDecorator.ts b/packages/idempotency/src/idempotencyDecorator.ts index 6c6ff7b2e1..00c10690cb 100644 --- a/packages/idempotency/src/idempotencyDecorator.ts +++ b/packages/idempotency/src/idempotencyDecorator.ts @@ -1,3 +1,4 @@ +import type { Handler } from 'aws-lambda'; import { AnyFunction, ItempotentFunctionOptions, @@ -65,7 +66,10 @@ const idempotent = function ( descriptor: PropertyDescriptor ) { const childFunction = descriptor.value; - descriptor.value = makeIdempotent(childFunction, options); + + descriptor.value = async function (this: Handler, ...args: unknown[]) { + return makeIdempotent(childFunction, options).bind(this)(...args); + }; return descriptor; }; diff --git a/packages/idempotency/src/makeIdempotent.ts b/packages/idempotency/src/makeIdempotent.ts index dafb807e53..ed02a64f44 100644 --- a/packages/idempotency/src/makeIdempotent.ts +++ b/packages/idempotency/src/makeIdempotent.ts @@ -72,16 +72,17 @@ const isOptionsWithDataIndexArgument = ( * * ``` */ -const makeIdempotent = ( +// eslint-disable-next-line func-style +function makeIdempotent( fn: Func, options: ItempotentFunctionOptions> -): ((...args: Parameters) => ReturnType) => { +): (...args: Parameters) => ReturnType { const { persistenceStore, config } = options; const idempotencyConfig = config ? config : new IdempotencyConfig({}); if (!idempotencyConfig.isEnabled()) return fn; - return (...args: Parameters): ReturnType => { + return function (this: Handler, ...args: Parameters): ReturnType { let functionPayloadToBeHashed; if (isFnHandler(fn, args)) { @@ -101,8 +102,9 @@ const makeIdempotent = ( persistenceStore: persistenceStore, functionArguments: args, functionPayloadToBeHashed, + thisArg: this, }).handle() as ReturnType; }; -}; +} export { makeIdempotent }; diff --git a/packages/idempotency/src/types/IdempotencyOptions.ts b/packages/idempotency/src/types/IdempotencyOptions.ts index c8ae467ad4..e1c290e233 100644 --- a/packages/idempotency/src/types/IdempotencyOptions.ts +++ b/packages/idempotency/src/types/IdempotencyOptions.ts @@ -1,4 +1,4 @@ -import type { Context } from 'aws-lambda'; +import type { Context, Handler } from 'aws-lambda'; import type { BasePersistenceLayer } from '../persistence/BasePersistenceLayer.js'; import type { IdempotencyConfig } from '../IdempotencyConfig.js'; import type { JSONValue } from '@aws-lambda-powertools/commons/types'; @@ -139,6 +139,12 @@ type IdempotencyHandlerOptions = { * Persistence layer used to store the idempotency records. */ persistenceStore: BasePersistenceLayer; + /** + * The `this` context to be used when calling the function. + * + * When decorating a class method, this will be the instance of the class. + */ + thisArg?: Handler; }; /** diff --git a/packages/idempotency/tests/e2e/idempotentDecorator.test.FunctionCode.ts b/packages/idempotency/tests/e2e/idempotentDecorator.test.FunctionCode.ts index 9b6dccbad2..603bff9208 100644 --- a/packages/idempotency/tests/e2e/idempotentDecorator.test.FunctionCode.ts +++ b/packages/idempotency/tests/e2e/idempotentDecorator.test.FunctionCode.ts @@ -25,12 +25,14 @@ const dynamoDBPersistenceLayerCustomized = new DynamoDBPersistenceLayer({ const config = new IdempotencyConfig({}); class DefaultLambda implements LambdaInterface { + private readonly message = 'Got test event:'; + @idempotent({ persistenceStore: dynamoDBPersistenceLayer }) public async handler( _event: Record, _context: Context ): Promise { - logger.info(`Got test event: ${JSON.stringify(_event)}`); + logger.info(`${this.message} ${JSON.stringify(_event)}`); // sleep to enforce error with parallel execution await new Promise((resolve) => setTimeout(resolve, 1000)); diff --git a/packages/idempotency/tests/unit/idempotencyDecorator.test.ts b/packages/idempotency/tests/unit/idempotencyDecorator.test.ts index ebd8caacd6..db1353b6da 100644 --- a/packages/idempotency/tests/unit/idempotencyDecorator.test.ts +++ b/packages/idempotency/tests/unit/idempotencyDecorator.test.ts @@ -19,6 +19,7 @@ import type { IdempotencyRecordOptions } from '../../src/types/index.js'; import { Context } from 'aws-lambda'; import context from '@aws-lambda-powertools/testing-utils/context'; import { IdempotencyRecordStatus } from '../../src/constants.js'; +import type { LambdaInterface } from '@aws-lambda-powertools/commons/types'; const mockSaveInProgress = jest .spyOn(BasePersistenceLayer.prototype, 'saveInProgress') @@ -86,7 +87,10 @@ describe('Given a class with a function to decorate', (classWithLambdaHandler = testingKey: keyValueToBeSaved, otherKey: 'thisWillNot', }; - beforeEach(() => jest.clearAllMocks()); + beforeEach(() => { + jest.clearAllMocks(); + jest.resetAllMocks(); + }); describe('When wrapping a function with no previous executions', () => { beforeEach(async () => { @@ -313,4 +317,34 @@ describe('Given a class with a function to decorate', (classWithLambdaHandler = delete process.env.POWERTOOLS_IDEMPOTENCY_DISABLED; }); }); + + it('maintains the scope of the decorated function', async () => { + // Prepare + class TestClass implements LambdaInterface { + private readonly foo = 'foo'; + + @idempotent({ + persistenceStore: new PersistenceLayerTestClass(), + }) + public async handler( + _event: unknown, + _context: Context + ): Promise { + return this.privateMethod(); + } + + public privateMethod(): string { + return `private ${this.foo}`; + } + } + + const handlerClass = new TestClass(); + const handler = handlerClass.handler.bind(handlerClass); + + // Act + const result = await handler({}, context); + + // Assess + expect(result).toBe('private foo'); + }); }); diff --git a/packages/jmespath/CHANGELOG.md b/packages/jmespath/CHANGELOG.md index 43c5a811d1..956a9a63fa 100644 --- a/packages/jmespath/CHANGELOG.md +++ b/packages/jmespath/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. +# [2.3.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.2.0...v2.3.0) (2024-06-27) + +**Note:** Version bump only for package @aws-lambda-powertools/jmespath + + + + + # [2.2.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.1...v2.2.0) (2024-06-13) **Note:** Version bump only for package @aws-lambda-powertools/jmespath diff --git a/packages/jmespath/package.json b/packages/jmespath/package.json index 05bc621b08..9aa46dc5d6 100644 --- a/packages/jmespath/package.json +++ b/packages/jmespath/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/jmespath", - "version": "2.2.0", + "version": "2.3.0", "description": "A type safe and modern jmespath module to parse and extract data from JSON documents using JMESPath", "author": { "name": "Amazon Web Services", @@ -71,7 +71,7 @@ "lib" ], "dependencies": { - "@aws-lambda-powertools/commons": "^2.2.0" + "@aws-lambda-powertools/commons": "^2.3.0" }, "repository": { "type": "git", diff --git a/packages/logger/CHANGELOG.md b/packages/logger/CHANGELOG.md index f3238e707b..8350c62c17 100644 --- a/packages/logger/CHANGELOG.md +++ b/packages/logger/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.3.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.2.0...v2.3.0) (2024-06-27) + + +### Bug Fixes + +* **logger:** reset log level after sampling refresh ([#2673](https://github.com/aws-powertools/powertools-lambda-typescript/issues/2673)) ([618faec](https://github.com/aws-powertools/powertools-lambda-typescript/commit/618faeca7a2fff1d8570bd46832da65129196220)) + + +### Features + +* **logger:** add `clearState()` method ([#2408](https://github.com/aws-powertools/powertools-lambda-typescript/issues/2408)) ([f55e2d0](https://github.com/aws-powertools/powertools-lambda-typescript/commit/f55e2d019f8693ca79753eb56ba951b0fd33101b)) + + + + + # [2.2.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.1...v2.2.0) (2024-06-13) **Note:** Version bump only for package @aws-lambda-powertools/logger diff --git a/packages/logger/package.json b/packages/logger/package.json index dcbcadd9d5..8b26a51b5c 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/logger", - "version": "2.2.0", + "version": "2.3.0", "description": "The logging package for the Powertools for AWS Lambda (TypeScript) library", "author": { "name": "Amazon Web Services", @@ -85,7 +85,7 @@ "url": "https://github.com/aws-powertools/powertools-lambda-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^2.2.0", + "@aws-lambda-powertools/commons": "^2.3.0", "lodash.merge": "^4.6.2" }, "keywords": [ diff --git a/packages/logger/src/Logger.ts b/packages/logger/src/Logger.ts index 739e0fdadb..d91b9ce39f 100644 --- a/packages/logger/src/Logger.ts +++ b/packages/logger/src/Logger.ts @@ -172,6 +172,10 @@ class Logger extends Utility implements LoggerInterface { * Standard attributes managed by Powertools that will be logged in all log items. */ private powertoolsLogData: PowertoolsLogData = {}; + /** + * Temporary log attributes that can be appended with `appendKeys()` method. + */ + private temporaryLogAttributes: LogAttributes = {}; /** * Buffer used to store logs until the logger is initialized. * @@ -183,6 +187,19 @@ class Logger extends Utility implements LoggerInterface { * Flag used to determine if the logger is initialized. */ #isInitialized = false; + /** + * Map used to hold the list of keys and their type. + * + * Because keys of different types can be overwritten, we keep a list of keys that were added and their last + * type. We then use this map at log preparation time to pick the last one. + */ + #keys: Map = new Map(); + /** + * This is the initial log leval as set during the initialization of the logger. + * + * We keep this value to be able to reset the log level to the initial value when the sample rate is refreshed. + */ + #initialLogLevel = 12; /** * Log level used by the current instance of Logger. @@ -234,23 +251,40 @@ class Logger extends Utility implements LoggerInterface { } /** - * It adds the given attributes (key-value pairs) to all log items generated by this Logger instance. + * It adds the given persistent attributes (key-value pairs) to all log items generated by this Logger instance. + * + * @deprecated This method is deprecated and will be removed in the future major versions, please use {@link appendPersistentKeys()} instead. * * @param {LogAttributes} attributes * @returns {void} */ - public addPersistentLogAttributes(attributes?: LogAttributes): void { - merge(this.persistentLogAttributes, attributes); + public addPersistentLogAttributes(attributes: LogAttributes): void { + this.appendPersistentKeys(attributes); } /** - * Alias for addPersistentLogAttributes. + * It adds the given temporary attributes (key-value pairs) to all log items generated by this Logger instance. * * @param {LogAttributes} attributes * @returns {void} */ - public appendKeys(attributes?: LogAttributes): void { - this.addPersistentLogAttributes(attributes); + public appendKeys(attributes: LogAttributes): void { + for (const attributeKey of Object.keys(attributes)) { + this.#keys.set(attributeKey, 'temp'); + } + merge(this.temporaryLogAttributes, attributes); + } + + /** + * It adds the given persistent attributes (key-value pairs) to all log items generated by this Logger instance. + * + * @param attributes - The attributes to add to all log items. + */ + public appendPersistentKeys(attributes: LogAttributes): void { + for (const attributeKey of Object.keys(attributes)) { + this.#keys.set(attributeKey, 'persistent'); + } + merge(this.persistentLogAttributes, attributes); } /** @@ -274,6 +308,7 @@ class Logger extends Utility implements LoggerInterface { customConfigService: this.getCustomConfigService(), environment: this.powertoolsLogData.environment, persistentLogAttributes: this.persistentLogAttributes, + temporaryLogAttributes: this.temporaryLogAttributes, }, options ) @@ -417,13 +452,6 @@ class Logger extends Utility implements LoggerInterface { context, callback ) { - let initialPersistentAttributes = {}; - if (options && options.clearState === true) { - initialPersistentAttributes = { - ...loggerRef.getPersistentLogAttributes(), - }; - } - Logger.injectLambdaContextBefore(loggerRef, event, context, options); let result: unknown; @@ -432,11 +460,7 @@ class Logger extends Utility implements LoggerInterface { } catch (error) { throw error; } finally { - Logger.injectLambdaContextAfterOrOnError( - loggerRef, - initialPersistentAttributes, - options - ); + if (options?.clearState || options?.resetKeys) loggerRef.resetKeys(); } return result; @@ -444,13 +468,17 @@ class Logger extends Utility implements LoggerInterface { }; } + /** + * @deprecated This method is deprecated and will be removed in the future major versions. Use {@link resetKeys()} instead. + */ + /* istanbul ignore next */ public static injectLambdaContextAfterOrOnError( logger: Logger, - initialPersistentAttributes: LogAttributes, + _persistentAttributes: LogAttributes, options?: InjectLambdaContextOptions ): void { - if (options && options.clearState === true) { - logger.setPersistentLogAttributes(initialPersistentAttributes); + if (options && (options.clearState || options?.resetKeys)) { + logger.resetKeys(); } } @@ -493,27 +521,75 @@ class Logger extends Utility implements LoggerInterface { } /** - * Alias for removePersistentLogAttributes. + * It removes temporary attributes based on provided keys to all log items generated by this Logger instance. * * @param {string[]} keys * @returns {void} */ public removeKeys(keys: string[]): void { - this.removePersistentLogAttributes(keys); + for (const key of keys) { + this.temporaryLogAttributes[key] = undefined; + + if (this.persistentLogAttributes[key]) { + this.#keys.set(key, 'persistent'); + } else { + this.#keys.delete(key); + } + } } /** - * It removes attributes based on provided keys to all log items generated by this Logger instance. + * Remove the given keys from the persistent keys. + * + * @example + * ```typescript + * import { Logger } from '@aws-lambda-powertools/logger'; + * + * const logger = new Logger({ + * persistentKeys: { + * environment: 'prod', + * }, + * }); + * + * logger.removePersistentKeys(['environment']); + * ``` + * + * @param keys - The keys to remove from the persistent attributes. + */ + public removePersistentKeys(keys: string[]): void { + for (const key of keys) { + this.persistentLogAttributes[key] = undefined; + + if (this.temporaryLogAttributes[key]) { + this.#keys.set(key, 'temp'); + } else { + this.#keys.delete(key); + } + } + } + + /** + * @deprecated This method is deprecated and will be removed in the future major versions. Use {@link removePersistentKeys()} instead. * * @param {string[]} keys * @returns {void} */ public removePersistentLogAttributes(keys: string[]): void { - for (const key of keys) { - if (this.persistentLogAttributes && key in this.persistentLogAttributes) { - delete this.persistentLogAttributes[key]; + this.removePersistentKeys(keys); + } + + /** + * It removes all temporary log attributes added with `appendKeys()` method. + */ + public resetKeys(): void { + for (const key of Object.keys(this.temporaryLogAttributes)) { + if (this.persistentLogAttributes[key]) { + this.#keys.set(key, 'persistent'); + } else { + this.#keys.delete(key); } } + this.temporaryLogAttributes = {}; } /** @@ -537,6 +613,8 @@ class Logger extends Utility implements LoggerInterface { * It sets the given attributes (key-value pairs) to all log items generated by this Logger instance. * Note: this replaces the pre-existing value. * + * @deprecated This method is deprecated and will be removed in the future major versions, please use {@link appendPersistentKeys()} instead. + * * @param {LogAttributes} attributes * @returns {void} */ @@ -665,10 +743,18 @@ class Logger extends Utility implements LoggerInterface { ...this.getPowertoolsLogData(), }; - // gradually merge additional attributes starting from customer-provided persistent attributes - let additionalLogAttributes = { ...this.getPersistentLogAttributes() }; + const additionalAttributes: LogAttributes = {}; + // gradually add additional attributes picking only the last added for each key + for (const [key, type] of this.#keys) { + if (type === 'persistent') { + additionalAttributes[key] = this.persistentLogAttributes[key]; + } else { + additionalAttributes[key] = this.temporaryLogAttributes[key]; + } + } + // if the main input is not a string, then it's an object with additional attributes, so we merge it - additionalLogAttributes = merge(additionalLogAttributes, otherInput); + merge(additionalAttributes, otherInput); // then we merge the extra input attributes (if any) for (const item of extraInput) { const attributes: LogAttributes = @@ -678,12 +764,12 @@ class Logger extends Utility implements LoggerInterface { ? { extra: item } : item; - additionalLogAttributes = merge(additionalLogAttributes, attributes); + merge(additionalAttributes, attributes); } return this.getLogFormatter().formatAttributes( unformattedBaseAttributes, - additionalLogAttributes + additionalAttributes ); } @@ -918,6 +1004,7 @@ class Logger extends Utility implements LoggerInterface { if (this.isValidLogLevel(constructorLogLevel)) { this.logLevel = this.logLevelThresholds[constructorLogLevel]; + this.#initialLogLevel = this.logLevel; return; } @@ -926,12 +1013,14 @@ class Logger extends Utility implements LoggerInterface { ?.toUpperCase(); if (this.isValidLogLevel(customConfigValue)) { this.logLevel = this.logLevelThresholds[customConfigValue]; + this.#initialLogLevel = this.logLevel; return; } const envVarsValue = this.getEnvVarsService()?.getLogLevel()?.toUpperCase(); if (this.isValidLogLevel(envVarsValue)) { this.logLevel = this.logLevelThresholds[envVarsValue]; + this.#initialLogLevel = this.logLevel; return; } @@ -961,6 +1050,10 @@ class Logger extends Utility implements LoggerInterface { if (value && randomInt(0, 100) / 100 <= value) { this.setLogLevel('DEBUG'); this.debug('Setting log level to DEBUG due to sampling rate'); + } else { + this.setLogLevel( + this.getLogLevelNameFromNumber(this.#initialLogLevel) + ); } return; @@ -1023,13 +1116,23 @@ class Logger extends Utility implements LoggerInterface { serviceName, sampleRateValue, logFormatter, - persistentLogAttributes, + persistentKeys, + persistentLogAttributes, // deprecated in favor of persistentKeys environment, } = options; + if (persistentLogAttributes && persistentKeys) { + this.warn( + 'Both persistentLogAttributes and persistentKeys options were provided. Using persistentKeys as persistentLogAttributes is deprecated and will be removed in future releases' + ); + } + // configurations that affect log content - this.setPowertoolsLogData(serviceName, environment); - this.addPersistentLogAttributes(persistentLogAttributes); + this.setPowertoolsLogData( + serviceName, + environment, + persistentKeys || persistentLogAttributes + ); // configurations that affect Logger behavior this.setLogEvent(); @@ -1070,7 +1173,7 @@ class Logger extends Utility implements LoggerInterface { this.getEnvVarsService().getServiceName() || this.getDefaultServiceName(), }); - this.addPersistentLogAttributes(persistentLogAttributes); + this.appendPersistentKeys(persistentLogAttributes); } } diff --git a/packages/logger/src/middleware/middy.ts b/packages/logger/src/middleware/middy.ts index 4e970e55a9..2481060145 100644 --- a/packages/logger/src/middleware/middy.ts +++ b/packages/logger/src/middleware/middy.ts @@ -1,5 +1,4 @@ import { Logger } from '../Logger.js'; -import type { LogAttributes } from '../types/Log.js'; import type { InjectLambdaContextOptions } from '../types/Logger.js'; import { LOGGER_KEY } from '@aws-lambda-powertools/commons'; import type { @@ -37,8 +36,8 @@ const injectLambdaContext = ( options?: InjectLambdaContextOptions ): MiddlewareLikeObj => { const loggers = target instanceof Array ? target : [target]; - const persistentAttributes: LogAttributes[] = []; - const isClearState = options && options.clearState === true; + const isResetStateEnabled = + options && (options.clearState || options.resetKeys); /** * Set the cleanup function to be called in case other middlewares return early. @@ -55,12 +54,8 @@ const injectLambdaContext = ( const injectLambdaContextBefore = async ( request: MiddyLikeRequest ): Promise => { - loggers.forEach((logger: Logger, index: number) => { - if (isClearState) { - persistentAttributes[index] = { - ...logger.getPersistentLogAttributes(), - }; - + loggers.forEach((logger: Logger) => { + if (isResetStateEnabled) { setCleanupFunction(request); } Logger.injectLambdaContextBefore( @@ -73,13 +68,9 @@ const injectLambdaContext = ( }; const injectLambdaContextAfterOrOnError = async (): Promise => { - if (isClearState) { - loggers.forEach((logger: Logger, index: number) => { - Logger.injectLambdaContextAfterOrOnError( - logger, - persistentAttributes[index], - options - ); + if (isResetStateEnabled) { + loggers.forEach((logger: Logger) => { + logger.resetKeys(); }); } }; diff --git a/packages/logger/src/types/Logger.ts b/packages/logger/src/types/Logger.ts index fdeb41d4e3..e662669fe3 100644 --- a/packages/logger/src/types/Logger.ts +++ b/packages/logger/src/types/Logger.ts @@ -18,19 +18,62 @@ type LogFunction = { type InjectLambdaContextOptions = { logEvent?: boolean; + /** + * @deprecated Use `resetKeys` instead. + */ clearState?: boolean; + /** + * If `true`, the logger will reset the keys added via {@link `appendKeys()`} + */ + resetKeys?: boolean; }; -type ConstructorOptions = { +type BaseConstructorOptions = { logLevel?: LogLevel; serviceName?: string; sampleRateValue?: number; logFormatter?: LogFormatterInterface; customConfigService?: ConfigServiceInterface; - persistentLogAttributes?: LogAttributes; environment?: Environment; }; +type PersistentKeysOption = { + /** + * Keys that will be added in all log items. + */ + persistentKeys?: LogAttributes; + /** + * @deprecated Use `persistentKeys` instead. + */ + persistentLogAttributes?: never; +}; + +type DeprecatedOption = { + /** + * @deprecated Use `persistentKeys` instead. + */ + persistentLogAttributes?: LogAttributes; + /** + * Keys that will be added in all log items. + */ + persistentKeys?: never; +}; + +/** + * Options for the Logger class constructor. + * + * @type {Object} ConstructorOptions + * @property {LogLevel} [logLevel] - The log level. + * @property {string} [serviceName] - The service name. + * @property {number} [sampleRateValue] - The sample rate value. + * @property {LogFormatterInterface} [logFormatter] - The custom log formatter. + * @property {ConfigServiceInterface} [customConfigService] - The custom config service. + * @property {Environment} [environment] - The environment. + * @property {LogAttributes} [persistentKeys] - Keys that will be added in all log items. + */ +type ConstructorOptions = BaseConstructorOptions & + (PersistentKeysOption | DeprecatedOption); + type LambdaFunctionContext = Pick< Context, | 'functionName' diff --git a/packages/logger/tests/e2e/sampleRate.decorator.test.FunctionCode.ts b/packages/logger/tests/e2e/sampleRate.decorator.test.FunctionCode.ts index 89c7e4833f..2ccedbe94f 100644 --- a/packages/logger/tests/e2e/sampleRate.decorator.test.FunctionCode.ts +++ b/packages/logger/tests/e2e/sampleRate.decorator.test.FunctionCode.ts @@ -1,5 +1,5 @@ import { Logger } from '../../src/index.js'; -import type { TestEvent, TestOutput } from '../helpers/types'; +import type { TestEvent, TestOutput } from '../helpers/types.js'; import type { Context } from 'aws-lambda'; import type { LambdaInterface } from '@aws-lambda-powertools/commons/types'; @@ -9,6 +9,7 @@ const LOG_MSG = process.env.LOG_MSG || 'Hello World'; const logger = new Logger({ sampleRateValue: SAMPLE_RATE, }); +let firstInvocation = true; class Lambda implements LambdaInterface { private readonly logMsg: string; @@ -19,9 +20,12 @@ class Lambda implements LambdaInterface { // Decorate your handler class method @logger.injectLambdaContext() - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - public async handler(event: TestEvent, context: Context): TestOutput { + public async handler(_event: TestEvent, context: Context): TestOutput { + if (firstInvocation) { + firstInvocation = false; + } else { + logger.refreshSampleRateCalculation(); + } this.printLogInAllLevels(); return { diff --git a/packages/logger/tests/unit/Logger.test.ts b/packages/logger/tests/unit/Logger.test.ts index e9e34beace..dd275a9be3 100644 --- a/packages/logger/tests/unit/Logger.test.ts +++ b/packages/logger/tests/unit/Logger.test.ts @@ -123,6 +123,7 @@ describe('Class: Logger', () => { persistentLogAttributes: { awsAccountId: '123456789', }, + temporaryLogAttributes: {}, powertoolsLogData: { awsRegion: 'eu-west-1', environment: 'prod', @@ -162,6 +163,7 @@ describe('Class: Logger', () => { ...logLevelThresholds, }, persistentLogAttributes: {}, + temporaryLogAttributes: {}, powertoolsLogData: { awsRegion: 'eu-west-1', environment: '', @@ -312,6 +314,7 @@ describe('Class: Logger', () => { ...logLevelThresholds, }, persistentLogAttributes: {}, + temporaryLogAttributes: {}, powertoolsLogData: { awsRegion: 'eu-west-1', environment: '', @@ -454,6 +457,82 @@ describe('Class: Logger', () => { ); }); + test('when custom persistentKeys is passed, returns a Logger instance with the correct properties', () => { + // Prepare + const loggerOptions: ConstructorOptions = { + persistentKeys: { + aws_account_id: '123456789012', + aws_region: 'eu-west-1', + logger: { + name: 'aws-lambda-powertool-typescript', + version: '0.2.4', + }, + }, + }; + + // Act + const logger = new Logger(loggerOptions); + + // Assess + expect(logger).toBeInstanceOf(Logger); + expect(logger).toEqual( + expect.objectContaining({ + persistentLogAttributes: { + aws_account_id: '123456789012', + aws_region: 'eu-west-1', + logger: { + name: 'aws-lambda-powertool-typescript', + version: '0.2.4', + }, + }, + powertoolsLogData: { + sampleRateValue: 0, + awsRegion: 'eu-west-1', + environment: '', + serviceName: 'hello-world', + }, + envVarsService: expect.any(EnvironmentVariablesService), + customConfigService: undefined, + logLevel: 8, + logFormatter: expect.any(PowertoolsLogFormatter), + }) + ); + }); + + test('it emits a warning when both persistentKeys and persistentLogAttributes are used in the constructor', () => { + // Prepare + // Since the buffer is private and we are bypassing the public warn method, we need to spy on the console.warn + process.env.POWERTOOLS_DEV = 'true'; + const warningSpy = jest.spyOn(console, 'warn').mockImplementation(); + + type TestConstructorOptions = { + persistentLogAttributes?: Record; + persistentKeys?: Record; + }; + + const loggerOptions: TestConstructorOptions = { + persistentKeys: { + foo: 'bar', + }, + persistentLogAttributes: { + foo: 'bar', + }, + }; + + // Act + new Logger(loggerOptions as ConstructorOptions); + + // Assess + expect(warningSpy).toHaveBeenCalledTimes(1); + expect(warningSpy).toHaveBeenCalledWith( + expect.stringContaining( + 'Both persistentLogAttributes and persistentKeys options were provided. Using persistentKeys as persistentLogAttributes is deprecated and will be removed in future releases' + ) + ); + // Cleanup + warningSpy.mockRestore(); + }); + test('when a custom environment is passed, returns a Logger instance with the correct properties', () => { // Prepare const loggerOptions: ConstructorOptions = { @@ -1315,7 +1394,7 @@ describe('Class: Logger', () => { }); describe('Method: appendKeys', () => { - test('when called, it populates the logger persistentLogAttributes property', () => { + test('when called, it populates the logger temporaryLogAttributes property', () => { // Prepare const logger = new Logger(); @@ -1332,7 +1411,7 @@ describe('Class: Logger', () => { // Assess expect(logger).toEqual( expect.objectContaining({ - persistentLogAttributes: { + temporaryLogAttributes: { aws_account_id: '123456789012', aws_region: 'eu-west-1', logger: { @@ -1374,16 +1453,43 @@ describe('Class: Logger', () => { // Assess expect(logger).toEqual( expect.objectContaining({ - persistentLogAttributes: { + temporaryLogAttributes: { duplicateKey: 'two', }, }) ); }); + + test('when called with the same key as in persistentKeys container option, persistent keys will be overwritten', () => { + // Prepare + const logger = new Logger({ + persistentKeys: { + aws_account_id: '1234567890', + }, + }); + + logger.appendKeys({ + aws_account_id: '0987654321', + }); + + const consoleSpy = jest.spyOn(logger['console'], 'info'); + + // Act + logger.info('This is an INFO log with some log attributes'); + + // Assess + expect(consoleSpy).toHaveBeenCalledTimes(1); + const log = JSON.parse(consoleSpy.mock.calls[0][0]); + expect(log).toStrictEqual( + expect.objectContaining({ + aws_account_id: '0987654321', + }) + ); + }); }); describe('Method: removeKeys', () => { - test('when called, it removes keys from the logger persistentLogAttributes property', () => { + test('when called, it removes keys added with appendKeys() method', () => { // Prepare const logger = new Logger(); logger.appendKeys({ @@ -1398,10 +1504,42 @@ describe('Class: Logger', () => { // Act logger.removeKeys(['aws_account_id', 'aws_region']); + // Assess + expect(logger).toEqual( + expect.objectContaining({ + temporaryLogAttributes: { + logger: { + name: 'aws-lambda-powertool-typescript', + version: '0.2.4', + }, + }, + }) + ); + }); + + test('when called, it DOES NOT remove persistent keys', () => { + // Prepare + const loggerOptions: ConstructorOptions = { + persistentKeys: { + aws_account_id: '123456789012', + aws_region: 'eu-west-1', + logger: { + name: 'aws-lambda-powertool-typescript', + version: '0.2.4', + }, + }, + }; + const logger = new Logger(loggerOptions); + + // Act + logger.removeKeys(['aws_account_id', 'aws_region']); + // Assess expect(logger).toEqual( expect.objectContaining({ persistentLogAttributes: { + aws_account_id: '123456789012', + aws_region: 'eu-west-1', logger: { name: 'aws-lambda-powertool-typescript', version: '0.2.4', @@ -1411,7 +1549,7 @@ describe('Class: Logger', () => { ); }); - test('when called with non-existing keys, the logger property persistentLogAttributes is not mutated and it does not throw an error', () => { + test('when called with non-existing keys, the logger instance is not mutated and it does not throw an error', () => { // Prepare const logger = new Logger(); logger.appendKeys({ @@ -1431,7 +1569,7 @@ describe('Class: Logger', () => { expect(logger).toEqual(loggerBeforeKeysAreRemoved); expect(logger).toEqual( expect.objectContaining({ - persistentLogAttributes: { + temporaryLogAttributes: { aws_account_id: '123456789012', aws_region: 'eu-west-1', logger: { @@ -1459,6 +1597,38 @@ describe('Class: Logger', () => { logger.removeKeys(['aws_account_id', 'aws_region']); logger.removeKeys(['aws_account_id', 'aws_region']); + // Assess + expect(logger).toEqual( + expect.objectContaining({ + temporaryLogAttributes: { + logger: { + name: 'aws-lambda-powertool-typescript', + version: '0.2.4', + }, + }, + }) + ); + }); + }); + + describe('Method: removePersistentLogAttributes', () => { + test('when called, it removes persistent keys', () => { + // Prepare + const loggerOptions: ConstructorOptions = { + persistentKeys: { + aws_account_id: '123456789012', + aws_region: 'eu-west-1', + logger: { + name: 'aws-lambda-powertool-typescript', + version: '0.2.4', + }, + }, + }; + const logger = new Logger(loggerOptions); + + // Act + logger.removePersistentLogAttributes(['aws_account_id', 'aws_region']); + // Assess expect(logger).toEqual( expect.objectContaining({ @@ -1471,6 +1641,187 @@ describe('Class: Logger', () => { }) ); }); + + test('when called, it DOES NOT remove temporary keys', () => { + // Prepare + const logger = new Logger(); + logger.appendKeys({ + aws_account_id: '123456789012', + aws_region: 'eu-west-1', + }); + + // Act + logger.removePersistentLogAttributes(['aws_account_id', 'aws_region']); + + // Assess + expect(logger).toEqual( + expect.objectContaining({ + temporaryLogAttributes: { + aws_account_id: '123456789012', + aws_region: 'eu-west-1', + }, + }) + ); + }); + }); + + describe('Method: resetKeys', () => { + test('when called, it removes all keys added with appendKeys() method', () => { + // Prepare + const logger = new Logger(); + logger.appendKeys({ + aws_account_id: '123456789012', + aws_region: 'eu-west-1', + logger: { + name: 'aws-lambda-powertool-typescript', + version: '0.2.4', + }, + }); + + // Act + logger.resetKeys(); + + // Assess + expect(logger).toEqual( + expect.objectContaining({ + temporaryLogAttributes: {}, + }) + ); + }); + + test('when called, it DOES NOT remove persistent keys', () => { + // Prepare + const loggerOptions: ConstructorOptions = { + persistentKeys: { + aws_account_id: '123456789012', + aws_region: 'eu-west-1', + logger: { + name: 'aws-lambda-powertool-typescript', + version: '0.2.4', + }, + }, + }; + const logger = new Logger(loggerOptions); + logger.appendKeys({ foo: 'bar' }); + + // Act + logger.resetKeys(); + + // Assess + expect(logger).toEqual( + expect.objectContaining({ + persistentLogAttributes: { + aws_account_id: '123456789012', + aws_region: 'eu-west-1', + logger: { + name: 'aws-lambda-powertool-typescript', + version: '0.2.4', + }, + }, + temporaryLogAttributes: {}, + }) + ); + }); + + it('preserves persistent keys that were previously overwritten', () => { + // Prepare + const logger = new Logger({ + persistentKeys: { + aws_region: 'eu-west-1', + }, + }); + const debugSpy = jest.spyOn(logger['console'], 'info'); + logger.appendKeys({ + aws_region: 'us-east-1', + }); + + // Act + logger.resetKeys(); + logger.info('foo'); + + // Assess + const log = JSON.parse(debugSpy.mock.calls[0][0]); + expect(log).toStrictEqual( + expect.objectContaining({ aws_region: 'eu-west-1' }) + ); + }); + }); + + describe('method: setPersistentLogAttributes (deprecated)', () => { + test('when called, it overwrites all persistent keys', () => { + // Prepare + const loggerOptions: ConstructorOptions = { + persistentKeys: { + aws_account_id: '123456789012', + aws_region: 'eu-west-1', + logger: { + name: 'aws-lambda-powertool-typescript', + version: '0.2.4', + }, + }, + }; + const logger = new Logger(loggerOptions); + + // Act + logger.setPersistentLogAttributes({ + foo: 'bar', + }); + + // Assess + expect(logger).toEqual( + expect.objectContaining({ + persistentLogAttributes: { + foo: 'bar', + }, + }) + ); + }); + }); + + describe('Method: appendPersistentKeys', () => { + it('overwrites existing persistent keys with new ones', () => { + // Prepare + const logger = new Logger({ + persistentKeys: { + aws_account_id: '123456789012', + }, + }); + + // Act + logger.appendPersistentKeys({ + aws_account_id: '0987654321', + }); + + // Assess + expect(logger).toEqual( + expect.objectContaining({ + persistentLogAttributes: { + aws_account_id: '0987654321', + }, + }) + ); + }); + + it('overwrites existing temporary keys with new ones in the next log', () => { + // Prepare + const logger = new Logger(); + const debugSpy = jest.spyOn(logger['console'], 'info'); + logger.appendKeys({ + aws_account_id: '123456789012', + }); + + // Act + logger.appendPersistentKeys({ + aws_account_id: '0987654321', + }); + logger.info('This is an INFO log with some log attributes'); + + // Assess + const log = JSON.parse(debugSpy.mock.calls[0][0]); + expect(log).toStrictEqual( + expect.objectContaining({ aws_account_id: '0987654321' }) + ); + }); }); describe('Method: injectLambdaContext', () => { @@ -1503,10 +1854,10 @@ describe('Class: Logger', () => { await handler(event, context); // Assess - expect(consoleSpy).toBeCalledTimes(1); - expect(consoleSpy).toHaveBeenNthCalledWith( - 1, - JSON.stringify({ + expect(consoleSpy).toHaveBeenCalledTimes(1); + const log = JSON.parse(consoleSpy.mock.calls[0][0]); + expect(log).toEqual( + expect.objectContaining({ cold_start: true, function_arn: 'arn:aws:lambda:eu-west-1:123456789012:function:foo-bar-function', @@ -1545,10 +1896,10 @@ describe('Class: Logger', () => { // Assess - expect(consoleSpy).toBeCalledTimes(2); - expect(consoleSpy).toHaveBeenNthCalledWith( - 1, - JSON.stringify({ + expect(consoleSpy).toHaveBeenCalledTimes(2); + const log1 = JSON.parse(consoleSpy.mock.calls[0][0]); + expect(log1).toStrictEqual( + expect.objectContaining({ level: 'INFO', message: 'An INFO log without context!', sampling_rate: 0, @@ -1557,9 +1908,9 @@ describe('Class: Logger', () => { xray_trace_id: '1-5759e988-bd862e3fe1be46a994272793', }) ); - expect(consoleSpy).toHaveBeenNthCalledWith( - 2, - JSON.stringify({ + const log2 = JSON.parse(consoleSpy.mock.calls[1][0]); + expect(log2).toStrictEqual( + expect.objectContaining({ cold_start: true, function_arn: 'arn:aws:lambda:eu-west-1:123456789012:function:foo-bar-function', @@ -1602,10 +1953,10 @@ describe('Class: Logger', () => { // Assess expect(actualResult).toEqual(expectedReturnValue); - expect(consoleSpy).toBeCalledTimes(2); - expect(consoleSpy).toHaveBeenNthCalledWith( - 1, - JSON.stringify({ + expect(consoleSpy).toHaveBeenCalledTimes(2); + const log1 = JSON.parse(consoleSpy.mock.calls[0][0]); + expect(log1).toStrictEqual( + expect.objectContaining({ level: 'INFO', message: 'An INFO log without context!', sampling_rate: 0, @@ -1614,9 +1965,9 @@ describe('Class: Logger', () => { xray_trace_id: '1-5759e988-bd862e3fe1be46a994272793', }) ); - expect(consoleSpy).toHaveBeenNthCalledWith( - 2, - JSON.stringify({ + const log2 = JSON.parse(consoleSpy.mock.calls[1][0]); + expect(log2).toStrictEqual( + expect.objectContaining({ cold_start: true, function_arn: 'arn:aws:lambda:eu-west-1:123456789012:function:foo-bar-function', @@ -1633,7 +1984,81 @@ describe('Class: Logger', () => { ); }); - test('when clearState is enabled, the persistent log attributes added in the handler are cleared when the method returns', async () => { + test('when enabled, it clears all the log attributes added with appendKeys() inside and outside of the handler function', async () => { + // Prepare + const logger = new Logger({ + logLevel: 'DEBUG', + }); + logger.appendKeys({ + foo: 'bar', + biz: 'baz', + }); + + const debugSpy = jest.spyOn(logger['console'], 'debug'); + + class LambdaFunction implements LambdaInterface { + @logger.injectLambdaContext({ clearState: true }) + public async handler( + _event: TEvent, + _context: Context + ): Promise { + // Only add these keys for the scope of this lambda handler + logger.appendKeys({ + details: { user_id: '1234' }, + }); + logger.debug('This is a DEBUG log with the user_id'); + } + } + + const handlerClass = new LambdaFunction(); + const handler = handlerClass.handler.bind(handlerClass); + + // Act + await handler(event, context); + logger.debug('Checking state after handler execution'); + + // Assess + expect(debugSpy).toHaveBeenCalledTimes(2); + const log1 = JSON.parse(debugSpy.mock.calls[0][0]); + expect(log1).toStrictEqual( + expect.objectContaining({ + cold_start: true, + function_arn: + 'arn:aws:lambda:eu-west-1:123456789012:function:foo-bar-function', + function_memory_size: '128', + function_name: 'foo-bar-function', + function_request_id: 'c6af9ac6-7b61-11e6-9a41-93e812345678', + level: 'DEBUG', + message: 'This is a DEBUG log with the user_id', + sampling_rate: 0, + service: 'hello-world', + timestamp: '2016-06-20T12:08:10.000Z', + xray_trace_id: '1-5759e988-bd862e3fe1be46a994272793', + foo: 'bar', + biz: 'baz', + details: { user_id: '1234' }, + }) + ); + const log2 = JSON.parse(debugSpy.mock.calls[1][0]); + expect(log2).toStrictEqual( + expect.objectContaining({ + cold_start: true, + function_arn: + 'arn:aws:lambda:eu-west-1:123456789012:function:foo-bar-function', + function_memory_size: '128', + function_name: 'foo-bar-function', + function_request_id: 'c6af9ac6-7b61-11e6-9a41-93e812345678', + level: 'DEBUG', + message: 'Checking state after handler execution', + sampling_rate: 0, + service: 'hello-world', + timestamp: '2016-06-20T12:08:10.000Z', + xray_trace_id: '1-5759e988-bd862e3fe1be46a994272793', + }) + ); + }); + + test('when clearState is enabled, the persistent log attributes added in the handler ARE NOT cleared when the method returns', async () => { // Prepare const logger = new Logger({ logLevel: 'DEBUG', @@ -1648,8 +2073,8 @@ describe('Class: Logger', () => { _event: TEvent, _context: Context ): Promise { - // Only add these persistent for the scope of this lambda handler - logger.appendKeys({ + // These persistent attributes stay persistent + logger.appendPersistentKeys({ details: { user_id: '1234' }, }); logger.debug('This is a DEBUG log with the user_id'); @@ -1673,54 +2098,155 @@ describe('Class: Logger', () => { foo: 'bar', biz: 'baz', }); - expect(persistentAttribsAfterInvocation).toEqual( - persistentAttribsBeforeInvocation - ); + expect(persistentAttribsAfterInvocation).toEqual({ + foo: 'bar', + biz: 'baz', + details: { user_id: '1234' }, + }); }); - test('when clearState is enabled, the persistent log attributes added in the handler are cleared when the method throws', async () => { + test('when clearState is enabled, persistent log attributes added in the handler stay persistent, but temporary added in the handler are cleared when the method returns', async () => { // Prepare const logger = new Logger({ logLevel: 'DEBUG', - persistentLogAttributes: { + }); + + const debugSpy = jest.spyOn(logger['console'], 'debug'); + + class LambdaFunction implements LambdaInterface { + @logger.injectLambdaContext({ clearState: true }) + public async handler( + _event: TEvent, + _context: Context + ): Promise { + // This key is persistent and will stay persistent + logger.appendPersistentKeys({ + foo: 'bar', + }); + // This attribute is temporary and will be cleared + logger.appendKeys({ + biz: 'baz', + }); + logger.debug( + 'This is a DEBUG log with both pesistent and temporary keys' + ); + } + } + const handlerClass = new LambdaFunction(); + const handler = handlerClass.handler.bind(handlerClass); + + // Act + await handler(event, context); + logger.debug('Checking state after handler execution'); + + // Assess + expect(debugSpy).toHaveBeenCalledTimes(2); + const log1 = JSON.parse(debugSpy.mock.calls[0][0]); + expect(log1).toStrictEqual( + expect.objectContaining({ + cold_start: true, + function_arn: + 'arn:aws:lambda:eu-west-1:123456789012:function:foo-bar-function', + function_memory_size: '128', + function_name: 'foo-bar-function', + function_request_id: 'c6af9ac6-7b61-11e6-9a41-93e812345678', + level: 'DEBUG', + message: 'This is a DEBUG log with both pesistent and temporary keys', + sampling_rate: 0, + service: 'hello-world', + timestamp: '2016-06-20T12:08:10.000Z', + xray_trace_id: '1-5759e988-bd862e3fe1be46a994272793', foo: 'bar', biz: 'baz', - }, + }) + ); + const log2 = JSON.parse(debugSpy.mock.calls[1][0]); + expect(log2).toStrictEqual( + expect.objectContaining({ + cold_start: true, + function_arn: + 'arn:aws:lambda:eu-west-1:123456789012:function:foo-bar-function', + function_memory_size: '128', + function_name: 'foo-bar-function', + function_request_id: 'c6af9ac6-7b61-11e6-9a41-93e812345678', + level: 'DEBUG', + message: 'Checking state after handler execution', + sampling_rate: 0, + service: 'hello-world', + timestamp: '2016-06-20T12:08:10.000Z', + xray_trace_id: '1-5759e988-bd862e3fe1be46a994272793', + foo: 'bar', + }) + ); + + debugSpy.mockRestore(); + }); + + test('when clearState is enabled, the temporary log attributes added in the handler are cleared when the method throws', async () => { + // Prepare + const logger = new Logger({ + logLevel: 'DEBUG', }); + + const debugSpy = jest.spyOn(logger['console'], 'debug'); + class LambdaFunction implements LambdaInterface { @logger.injectLambdaContext({ clearState: true }) public async handler( _event: TEvent, _context: Context ): Promise { - // Only add these persistent for the scope of this lambda handler + // This key is persistent and will stay persistent + logger.appendPersistentKeys({ + foo: 'bar', + }); + // This attribute is temporary and will be cleared logger.appendKeys({ - details: { user_id: '1234' }, + biz: 'baz', }); - logger.debug('This is a DEBUG log with the user_id'); - logger.debug('This is another DEBUG log with the user_id'); - + logger.debug( + 'This is a DEBUG log with both pesistent and temporary keys' + ); throw new Error('Unexpected error occurred!'); } } const handlerClass = new LambdaFunction(); const handler = handlerClass.handler.bind(handlerClass); - const persistentAttribsBeforeInvocation = { - ...logger.getPersistentLogAttributes(), - }; // Act & Assess await expect(handler(event, context)).rejects.toThrow(); - const persistentAttribsAfterInvocation = { - ...logger.getPersistentLogAttributes(), - }; - expect(persistentAttribsBeforeInvocation).toEqual({ - foo: 'bar', - biz: 'baz', - }); - expect(persistentAttribsAfterInvocation).toEqual( - persistentAttribsBeforeInvocation + + expect(debugSpy).toHaveBeenCalledTimes(1); + const log = JSON.parse(debugSpy.mock.calls[0][0]); + expect(log).toStrictEqual( + expect.objectContaining({ + cold_start: true, + function_arn: + 'arn:aws:lambda:eu-west-1:123456789012:function:foo-bar-function', + function_memory_size: '128', + function_name: 'foo-bar-function', + function_request_id: 'c6af9ac6-7b61-11e6-9a41-93e812345678', + level: 'DEBUG', + message: 'This is a DEBUG log with both pesistent and temporary keys', + sampling_rate: 0, + service: 'hello-world', + timestamp: '2016-06-20T12:08:10.000Z', + xray_trace_id: '1-5759e988-bd862e3fe1be46a994272793', + foo: 'bar', + biz: 'baz', + }) + ); + + expect(logger).toEqual( + expect.objectContaining({ + persistentLogAttributes: { + foo: 'bar', + }, + temporaryLogAttributes: {}, + }) ); + + debugSpy.mockRestore(); }); test('when logEvent is enabled, it logs the event in the first log', async () => { @@ -1745,10 +2271,10 @@ describe('Class: Logger', () => { await handler(event, context); // Assess - expect(consoleSpy).toBeCalledTimes(1); - expect(consoleSpy).toHaveBeenNthCalledWith( - 1, - JSON.stringify({ + expect(consoleSpy).toHaveBeenCalledTimes(1); + const log = JSON.parse(consoleSpy.mock.calls[0][0]); + expect(log).toStrictEqual( + expect.objectContaining({ cold_start: true, function_arn: 'arn:aws:lambda:eu-west-1:123456789012:function:foo-bar-function', @@ -1792,10 +2318,10 @@ describe('Class: Logger', () => { await handler(event, context); // Assess - expect(consoleSpy).toBeCalledTimes(1); - expect(consoleSpy).toHaveBeenNthCalledWith( - 1, - JSON.stringify({ + expect(consoleSpy).toHaveBeenCalledTimes(1); + const log = JSON.parse(consoleSpy.mock.calls[0][0]); + expect(log).toStrictEqual( + expect.objectContaining({ cold_start: true, function_arn: 'arn:aws:lambda:eu-west-1:123456789012:function:foo-bar-function', @@ -1850,10 +2376,10 @@ describe('Class: Logger', () => { await handler({}, context); // Assess - expect(consoleSpy).toBeCalledTimes(1); - expect(consoleSpy).toHaveBeenNthCalledWith( - 1, - JSON.stringify({ + expect(consoleSpy).toHaveBeenCalledTimes(1); + const log = JSON.parse(consoleSpy.mock.calls[0][0]); + expect(log).toStrictEqual( + expect.objectContaining({ cold_start: true, function_arn: 'arn:aws:lambda:eu-west-1:123456789012:function:foo-bar-function', @@ -1872,16 +2398,13 @@ describe('Class: Logger', () => { test('it awaits the decorated method correctly', async () => { // Prepare - const injectLambdaContextAfterOrOnErrorSpy = jest.spyOn( - Logger, - 'injectLambdaContextAfterOrOnError' - ); const logger = new Logger({ logLevel: 'DEBUG', }); + const resetKeysSpy = jest.spyOn(logger, 'resetKeys'); const consoleSpy = jest.spyOn(logger['console'], 'info'); class LambdaFunction implements LambdaInterface { - @logger.injectLambdaContext() + @logger.injectLambdaContext({ clearState: true }) public async handler( _event: unknown, _context: unknown @@ -1903,19 +2426,19 @@ describe('Class: Logger', () => { await handler({}, context); // Assess - expect(consoleSpy).toBeCalledTimes(1); + expect(consoleSpy).toHaveBeenCalledTimes(1); // Here we assert that the logger.info method is called before the cleanup function that should always // be called ONLY after the handler has returned. If logger.info is called after the cleanup function // it means the decorator is NOT awaiting the handler which would cause the test to fail. expect(consoleSpy.mock.invocationCallOrder[0]).toBeLessThan( - injectLambdaContextAfterOrOnErrorSpy.mock.invocationCallOrder[0] + resetKeysSpy.mock.invocationCallOrder[0] ); }); - test('when logEvent and clearState are both TRUE, and the logger has persistent attributes, any key added in the handler is cleared properly', async () => { + test('when logEvent and clearState are both TRUE, and the logger has persistent attributes, any key added with appendKeys() in the handler is cleared properly', async () => { // Prepare const logger = new Logger({ - persistentLogAttributes: { + persistentKeys: { version: '1.0.0', }, }); @@ -2012,6 +2535,7 @@ describe('Class: Logger', () => { ...logLevelThresholds, }, persistentLogAttributes: {}, + temporaryLogAttributes: {}, powertoolsLogData: { awsRegion: 'eu-west-1', environment: '', @@ -2039,6 +2563,7 @@ describe('Class: Logger', () => { ...logLevelThresholds, }, persistentLogAttributes: {}, + temporaryLogAttributes: {}, powertoolsLogData: { awsRegion: 'eu-west-1', environment: '', @@ -2066,6 +2591,7 @@ describe('Class: Logger', () => { ...logLevelThresholds, }, persistentLogAttributes: {}, + temporaryLogAttributes: {}, powertoolsLogData: { awsRegion: 'eu-west-1', environment: '', @@ -2141,6 +2667,7 @@ describe('Class: Logger', () => { ...logLevelThresholds, }, persistentLogAttributes: {}, + temporaryLogAttributes: {}, powertoolsLogData: { awsRegion: 'eu-west-1', environment: '', @@ -2171,6 +2698,7 @@ describe('Class: Logger', () => { extra: 'This is an attribute that will be logged only by the child logger', }, + temporaryLogAttributes: {}, powertoolsLogData: { awsRegion: 'eu-west-1', environment: '', @@ -2198,6 +2726,7 @@ describe('Class: Logger', () => { ...logLevelThresholds, }, persistentLogAttributes: {}, + temporaryLogAttributes: {}, powertoolsLogData: { awsRegion: 'eu-west-1', environment: '', @@ -2225,6 +2754,7 @@ describe('Class: Logger', () => { ...logLevelThresholds, }, persistentLogAttributes: {}, + temporaryLogAttributes: {}, powertoolsLogData: { awsRegion: 'eu-west-1', environment: '', @@ -2240,7 +2770,7 @@ describe('Class: Logger', () => { const childLogger = parentLogger.createChild(); // Act - parentLogger.appendKeys({ + parentLogger.appendPersistentKeys({ aws_account_id: '123456789012', aws_region: 'eu-west-1', logger: { @@ -2250,7 +2780,6 @@ describe('Class: Logger', () => { test_key: 'key-for-test', }); const childLoggerWithKeys = parentLogger.createChild(); - childLoggerWithKeys.removeKeys(['test_key']); // Assess expect(childLogger.getPersistentLogAttributes()).toEqual({}); @@ -2262,6 +2791,7 @@ describe('Class: Logger', () => { name: 'aws-lambda-powertool-typescript', version: '0.2.4', }, + test_key: 'key-for-test', }); expect(parentLogger.getPersistentLogAttributes()).toEqual({ @@ -2533,7 +3063,7 @@ describe('Class: Logger', () => { ); }); - it('uses log level set by ALC & emits a warning when setting a higher log level than ALC', () => { + test('it uses log level set by ALC & emits a warning when setting a higher log level than ALC', () => { // Prepare process.env.AWS_LAMBDA_LOG_LEVEL = 'ERROR'; process.env.LOG_LEVEL = undefined; @@ -2553,7 +3083,7 @@ describe('Class: Logger', () => { ); }); - it('uses log level set by ALC & emits a warning when initializing with a higher log level than ALC', () => { + test('it uses log level set by ALC & emits a warning when initializing with a higher log level than ALC', () => { // Prepare process.env.AWS_LAMBDA_LOG_LEVEL = 'INFO'; process.env.LOG_LEVEL = undefined; @@ -2851,7 +3381,7 @@ describe('Class: Logger', () => { ); }); - it('logs a DEBUG log when the sample rate sets the level to DEBUG', () => { + test('logs a DEBUG log when the sample rate sets the level to DEBUG', () => { // Prepare // Since the buffer is private and we are bypassing the public warn method, we need to spy on the console.warn process.env.POWERTOOLS_DEV = 'true'; @@ -2913,7 +3443,6 @@ describe('Class: Logger', () => { logger.refreshSampleRateCalculation(); if (logger.getLevelName() === 'DEBUG') { logLevelChangedToDebug++; - logger.setLogLevel('ERROR'); } } diff --git a/packages/logger/tests/unit/middleware/middy.test.ts b/packages/logger/tests/unit/middleware/middy.test.ts index 5cc612f5eb..eb9c9a7932 100644 --- a/packages/logger/tests/unit/middleware/middy.test.ts +++ b/packages/logger/tests/unit/middleware/middy.test.ts @@ -96,23 +96,156 @@ describe('Middy middleware', () => { }); }); - describe('Feature: clear state', () => { - test('when enabled, the persistent log attributes added within the handler scope are removed after the invocation ends', async () => { + describe('Feature: reset state', () => { + test('when enabled, it clears all the log attributes added with appendKeys() inside and outside of the handler function', async () => { // Prepare const logger = new Logger({ logLevel: 'DEBUG', - persistentLogAttributes: { + }); + logger.appendKeys({ + foo: 'bar', + biz: 'baz', + }); + + const debugSpy = jest.spyOn(logger['console'], 'debug'); + + const handler = middy((): void => { + // Only add these keys for the scope of this lambda handler + logger.appendKeys({ + details: { user_id: '1234' }, + }); + logger.debug('This is a DEBUG log with the user_id'); + }).use(injectLambdaContext(logger, { clearState: true })); + + // Act + await handler(event, context); + logger.debug('Checking state after handler execution'); + + // Assess + expect(debugSpy).toHaveBeenCalledTimes(2); + const log1 = JSON.parse(debugSpy.mock.calls[0][0]); + expect(log1).toStrictEqual( + expect.objectContaining({ + cold_start: true, + function_arn: + 'arn:aws:lambda:eu-west-1:123456789012:function:foo-bar-function', + function_memory_size: '128', + function_name: 'foo-bar-function', + function_request_id: 'c6af9ac6-7b61-11e6-9a41-93e812345678', + level: 'DEBUG', + message: 'This is a DEBUG log with the user_id', + sampling_rate: 0, + service: 'hello-world', + timestamp: '2016-06-20T12:08:10.000Z', + xray_trace_id: '1-5759e988-bd862e3fe1be46a994272793', foo: 'bar', biz: 'baz', + details: { user_id: '1234' }, + }) + ); + const log2 = JSON.parse(debugSpy.mock.calls[1][0]); + expect(log2).toStrictEqual( + expect.objectContaining({ + cold_start: true, + function_arn: + 'arn:aws:lambda:eu-west-1:123456789012:function:foo-bar-function', + function_memory_size: '128', + function_name: 'foo-bar-function', + function_request_id: 'c6af9ac6-7b61-11e6-9a41-93e812345678', + level: 'DEBUG', + message: 'Checking state after handler execution', + sampling_rate: 0, + service: 'hello-world', + timestamp: '2016-06-20T12:08:10.000Z', + xray_trace_id: '1-5759e988-bd862e3fe1be46a994272793', + }) + ); + }); + + test('when enabled, the temporary log attributes added within the handler scope are removed after the invocation ends', async () => { + // Prepare + const logger = new Logger({ + logLevel: 'DEBUG', + persistentLogAttributes: { + foo: 'bar', }, }); + logger.appendKeys({ + biz: 'baz', + }); + + const debugSpy = jest.spyOn(logger['console'], 'debug'); const handler = middy((): void => { - // Only add these persistent for the scope of this lambda handler + // These keys stay only in the scope of this lambda handler logger.appendKeys({ details: { user_id: '1234' }, }); logger.debug('This is a DEBUG log with the user_id'); + }).use(injectLambdaContext(logger, { clearState: true })); + + // Act + await handler(event, context); + logger.debug('Checking state after handler execution'); + + // Assess + expect(debugSpy).toHaveBeenCalledTimes(2); + const log1 = JSON.parse(debugSpy.mock.calls[0][0]); + expect(log1).toStrictEqual( + expect.objectContaining({ + cold_start: true, + function_arn: + 'arn:aws:lambda:eu-west-1:123456789012:function:foo-bar-function', + function_memory_size: '128', + function_name: 'foo-bar-function', + function_request_id: 'c6af9ac6-7b61-11e6-9a41-93e812345678', + level: 'DEBUG', + message: 'This is a DEBUG log with the user_id', + sampling_rate: 0, + service: 'hello-world', + timestamp: '2016-06-20T12:08:10.000Z', + xray_trace_id: '1-5759e988-bd862e3fe1be46a994272793', + foo: 'bar', + biz: 'baz', + details: { user_id: '1234' }, + }) + ); + const log2 = JSON.parse(debugSpy.mock.calls[1][0]); + expect(log2).toStrictEqual( + expect.objectContaining({ + cold_start: true, + function_arn: + 'arn:aws:lambda:eu-west-1:123456789012:function:foo-bar-function', + function_memory_size: '128', + function_name: 'foo-bar-function', + function_request_id: 'c6af9ac6-7b61-11e6-9a41-93e812345678', + level: 'DEBUG', + message: 'Checking state after handler execution', + sampling_rate: 0, + service: 'hello-world', + timestamp: '2016-06-20T12:08:10.000Z', + xray_trace_id: '1-5759e988-bd862e3fe1be46a994272793', + foo: 'bar', + }) + ); + }); + + test('when enabled, the persistent log attributes added within the handler scope ARE NOT removed after the invocation ends', async () => { + // Prepare + const logger = new Logger({ + logLevel: 'DEBUG', + persistentLogAttributes: { + foo: 'bar', + biz: 'baz', + }, + }); + + const handler = middy((): void => { + // These persistent attributes stay persistent + logger.addPersistentLogAttributes({ + details: { user_id: '1234' }, + }); + logger.debug('This is a DEBUG log with the user_id'); logger.debug('This is another DEBUG log with the user_id'); }).use(injectLambdaContext(logger, { clearState: true })); const persistentAttribsBeforeInvocation = { @@ -130,12 +263,14 @@ describe('Middy middleware', () => { foo: 'bar', biz: 'baz', }); - expect(persistentAttribsAfterInvocation).toEqual( - persistentAttribsBeforeInvocation - ); + expect(persistentAttribsAfterInvocation).toEqual({ + foo: 'bar', + biz: 'baz', + details: { user_id: '1234' }, + }); }); - test('when enabled, the persistent log attributes added within the handler scope are removed after the invocation ends even if an error is thrown', async () => { + test('when enabled, the persistent log attributes added within the handler scope ARE NOT removed after the invocation ends even if an error is thrown', async () => { // Prepare const logger = new Logger({ logLevel: 'DEBUG', @@ -145,8 +280,8 @@ describe('Middy middleware', () => { }, }); const handler = middy((): void => { - // Only add these persistent for the scope of this lambda handler - logger.appendKeys({ + // These persistent attributes stay persistent + logger.addPersistentLogAttributes({ details: { user_id: '1234' }, }); logger.debug('This is a DEBUG log with the user_id'); @@ -167,9 +302,11 @@ describe('Middy middleware', () => { foo: 'bar', biz: 'baz', }); - expect(persistentAttribsAfterInvocation).toEqual( - persistentAttribsBeforeInvocation - ); + expect(persistentAttribsAfterInvocation).toEqual({ + foo: 'bar', + biz: 'baz', + details: { user_id: '1234' }, + }); }); test('when enabled, and another middleware returns early, it still clears the state', async () => { diff --git a/packages/metrics/CHANGELOG.md b/packages/metrics/CHANGELOG.md index 5aeba61e3f..2d4fc61b7e 100644 --- a/packages/metrics/CHANGELOG.md +++ b/packages/metrics/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. +# [2.3.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.2.0...v2.3.0) (2024-06-27) + +**Note:** Version bump only for package @aws-lambda-powertools/metrics + + + + + # [2.2.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.1...v2.2.0) (2024-06-13) **Note:** Version bump only for package @aws-lambda-powertools/metrics diff --git a/packages/metrics/package.json b/packages/metrics/package.json index c1f55534a4..7de6c284a0 100644 --- a/packages/metrics/package.json +++ b/packages/metrics/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/metrics", - "version": "2.2.0", + "version": "2.3.0", "description": "The metrics package for the Powertools for AWS Lambda (TypeScript) library", "author": { "name": "Amazon Web Services", @@ -63,7 +63,7 @@ "main": "./lib/cjs/index.js", "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-cloudwatch": "^3.596.0", + "@aws-sdk/client-cloudwatch": "^3.600.0", "@types/promise-retry": "^1.1.3", "promise-retry": "^2.0.1" }, @@ -86,7 +86,7 @@ "url": "https://github.com/aws-powertools/powertools-lambda-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^2.2.0" + "@aws-lambda-powertools/commons": "^2.3.0" }, "keywords": [ "aws", diff --git a/packages/parameters/CHANGELOG.md b/packages/parameters/CHANGELOG.md index 1a24f0a241..ca17c8c529 100644 --- a/packages/parameters/CHANGELOG.md +++ b/packages/parameters/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. +# [2.3.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.2.0...v2.3.0) (2024-06-27) + +**Note:** Version bump only for package @aws-lambda-powertools/parameters + + + + + # [2.2.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.1...v2.2.0) (2024-06-13) **Note:** Version bump only for package @aws-lambda-powertools/parameters diff --git a/packages/parameters/package.json b/packages/parameters/package.json index fc1fd82194..0f058ec5ed 100644 --- a/packages/parameters/package.json +++ b/packages/parameters/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/parameters", - "version": "2.2.0", + "version": "2.3.0", "description": "The parameters package for the Powertools for AWS Lambda (TypeScript) library", "author": { "name": "Amazon Web Services", @@ -155,17 +155,17 @@ ], "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-appconfigdata": "^3.596.0", - "@aws-sdk/client-dynamodb": "^3.596.0", - "@aws-sdk/client-secrets-manager": "^3.596.0", - "@aws-sdk/client-ssm": "^3.596.0", - "@aws-sdk/util-dynamodb": "^3.596.0", + "@aws-sdk/client-appconfigdata": "^3.600.0", + "@aws-sdk/client-dynamodb": "^3.602.0", + "@aws-sdk/client-secrets-manager": "^3.600.0", + "@aws-sdk/client-ssm": "^3.603.0", + "@aws-sdk/util-dynamodb": "^3.602.0", "@smithy/util-base64": "^3.0.0", "aws-sdk-client-mock": "^4.0.1", "aws-sdk-client-mock-jest": "^4.0.1" }, "dependencies": { - "@aws-lambda-powertools/commons": "^2.2.0" + "@aws-lambda-powertools/commons": "^2.3.0" }, "peerDependencies": { "@aws-sdk/client-appconfigdata": ">=3.x", diff --git a/packages/parser/CHANGELOG.md b/packages/parser/CHANGELOG.md index 18d9f8a3bb..47b18262d0 100644 --- a/packages/parser/CHANGELOG.md +++ b/packages/parser/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. +# [2.3.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.2.0...v2.3.0) (2024-06-27) + + +### Features + +* **parser:** enhance API Gateway schemas ([#2665](https://github.com/aws-powertools/powertools-lambda-typescript/issues/2665)) ([b3bc1f0](https://github.com/aws-powertools/powertools-lambda-typescript/commit/b3bc1f0a173233fdcf50f2573949b17a312813b4)) + + + + + # [2.2.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.1...v2.2.0) (2024-06-13) diff --git a/packages/parser/jest.config.cjs b/packages/parser/jest.config.cjs index e1dca130b9..23684da5b4 100644 --- a/packages/parser/jest.config.cjs +++ b/packages/parser/jest.config.cjs @@ -9,8 +9,7 @@ module.exports = { '^(\\.{1,2}/.*)\\.js$': '$1', }, transform: { - '^.+\\.ts?$': ['ts-jest', {tsconfig: './tests/tsconfig.json'}], - + '^.+\\.ts?$': ['ts-jest'], }, moduleFileExtensions: ['js', 'ts'], collectCoverageFrom: ['**/src/**/*.ts', '!**/node_modules/**'], diff --git a/packages/parser/package.json b/packages/parser/package.json index 0e5cf39fcd..fba2e1e130 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/parser", - "version": "2.2.0", + "version": "2.3.0", "description": "The parser package for the Powertools for AWS Lambda (TypeScript) library.", "author": { "name": "Amazon Web Services", @@ -43,6 +43,14 @@ "require": "./lib/cjs/schemas/index.js", "import": "./lib/esm/schemas/index.js" }, + "./schemas/api-gateway": { + "require": "./lib/cjs/schemas/apigw.js", + "import": "./lib/esm/schemas/apigw.js" + }, + "./schemas/api-gatewayv2": { + "require": "./lib/cjs/schemas/apigwv2.js", + "import": "./lib/esm/schemas/apigwv2.js" + }, "./envelopes": { "require": "./lib/cjs/envelopes/index.js", "import": "./lib/esm/envelopes/index.js" @@ -66,6 +74,14 @@ "./lib/cjs/schemas/index.d.ts", "./lib/esm/schemas/index.d.ts" ], + "schemas/api-gateway": [ + "./lib/cjs/schemas/apigw.d.ts", + "./lib/esm/schemas/apigw.d.ts" + ], + "schemas/api-gatewayv2": [ + "./lib/cjs/schemas/apigwv2.d.ts", + "./lib/esm/schemas/apigwv2.d.ts" + ], "envelopes": [ "./lib/cjs/envelopes/index.d.ts", "./lib/esm/envelopes/index.d.ts" diff --git a/packages/parser/src/errors.ts b/packages/parser/src/errors.ts index 8e03bce5e9..2806b2d4cd 100644 --- a/packages/parser/src/errors.ts +++ b/packages/parser/src/errors.ts @@ -1,5 +1,6 @@ /** - * Error thrown when a parsing error occurs. The cause of the error is included in the message, if possible. + * Custom parsing error that wraps any erros thrown during schema or envelope parsing. + * The cause of the error is included in the message, if possible. */ class ParseError extends Error { /** diff --git a/packages/parser/src/parserDecorator.ts b/packages/parser/src/parserDecorator.ts index 0572d3a22e..2fdf93ed19 100644 --- a/packages/parser/src/parserDecorator.ts +++ b/packages/parser/src/parserDecorator.ts @@ -22,7 +22,7 @@ import type { ParserOptions, ParsedResult } from './types/index.js'; * * class Lambda implements LambdaInterface { * - * ⁣@parser({ envelope: SqsEnvelope, schema: OrderSchema }) + * @parser({ envelope: SqsEnvelope, schema: OrderSchema }) * public async handler(event: Order, _context: Context): Promise { * // sqs event is parsed and the payload is extracted and parsed * // apply business logic to your Order event @@ -53,7 +53,7 @@ import type { ParserOptions, ParsedResult } from './types/index.js'; * * class Lambda implements LambdaInterface { * - * ⁣git@parser({ envelope: SqsEnvelope, schema: OrderSchema, safeParse: true }) + * @parser({ envelope: SqsEnvelope, schema: OrderSchema, safeParse: true }) * public async handler(event: ParsedResult, _context: unknown): Promise { * if (event.success) { * // event.data is the parsed event object of type Order diff --git a/packages/parser/src/schemas/alb.ts b/packages/parser/src/schemas/alb.ts index 54d5de4fed..4afa283de2 100644 --- a/packages/parser/src/schemas/alb.ts +++ b/packages/parser/src/schemas/alb.ts @@ -1,5 +1,42 @@ import { z } from 'zod'; +/** + * Zod schema for Application load balancer event + * + * @example + * ```json + * { + * "requestContext": { + * "elb": { + * "targetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/my-target-group/6d0ecf831eec9f09" + * } + * }, + * "httpMethod": "GET", + * "path": "/", + * "queryStringParameters": { + * parameters + * }, + * "headers": { + * "accept": "text/html,application/xhtml+xml", + * "accept-language": "en-US,en;q=0.8", + * "content-type": "text/plain", + * "cookie": "cookies", + * "host": "lambda-846800462-us-east-2.elb.amazonaws.com", + * "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6)", + * "x-amzn-trace-id": "Root=1-5bdb40ca-556d8b0c50dc66f0511bf520", + * "x-forwarded-for": "72.21.198.66", + * "x-forwarded-port": "443", + * "x-forwarded-proto": "https" + * }, + * "isBase64Encoded": false, + * "body": "request_body" + * } + * ``` + * + * @see {@link types.ALBEvent | ALBEvent} + * @see {@link https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html} + * @see {@link https://docs.aws.amazon.com/lambda/latest/dg/services-alb.html} + */ const AlbSchema = z.object({ httpMethod: z.string(), path: z.string(), @@ -14,6 +51,24 @@ const AlbSchema = z.object({ }), }); +/** + * Zod schema for Application load balancer event with multi-value headers + * + * @example + * ```json + * { + * "multiValueHeaders": { + * "Set-cookie": [ + * "cookie-name=cookie-value;Domain=myweb.com;Secure;HttpOnly", + * "cookie-name=cookie-value;Expires=May 8, 2019" + * ], + * "Content-Type": [ + * "application/json" + * ] + * } + * } + * ``` + */ const AlbMultiValueHeadersSchema = AlbSchema.extend({ multiValueHeaders: z.record(z.string(), z.array(z.string())), multiValueQueryStringParameters: z.record(z.string(), z.array(z.string())), diff --git a/packages/parser/src/schemas/apigw-proxy.ts b/packages/parser/src/schemas/apigw-proxy.ts new file mode 100644 index 0000000000..ea35ee5191 --- /dev/null +++ b/packages/parser/src/schemas/apigw-proxy.ts @@ -0,0 +1,45 @@ +import { z } from 'zod'; + +/** + * A zod schema for an API Gateway Certificate + */ +const APIGatewayCert = z.object({ + clientCertPem: z.string(), + subjectDN: z.string(), + issuerDN: z.string(), + serialNumber: z.string(), + validity: z.object({ + notBefore: z.string(), + notAfter: z.string(), + }), +}); + +/** + * A zod schema for an object with string keys and string values + */ +const APIGatewayRecord = z.record(z.string()); + +/** + * A zod schema for an array of strings + */ +const APIGatewayStringArray = z.array(z.string()); + +/** + * A zod schema for API Gateway HTTP methods + */ +const APIGatewayHttpMethod = z.enum([ + 'GET', + 'POST', + 'PUT', + 'PATCH', + 'DELETE', + 'HEAD', + 'OPTIONS', +]); + +export { + APIGatewayCert, + APIGatewayRecord, + APIGatewayStringArray, + APIGatewayHttpMethod, +}; diff --git a/packages/parser/src/schemas/apigw.ts b/packages/parser/src/schemas/apigw.ts index ab4e20c6b2..53558736f2 100644 --- a/packages/parser/src/schemas/apigw.ts +++ b/packages/parser/src/schemas/apigw.ts @@ -1,16 +1,16 @@ import { z } from 'zod'; +import { + APIGatewayCert, + APIGatewayRecord, + APIGatewayStringArray, + APIGatewayHttpMethod, +} from './apigw-proxy.js'; -const APIGatewayCert = z.object({ - clientCertPem: z.string(), - subjectDN: z.string(), - issuerDN: z.string(), - serialNumber: z.string(), - validity: z.object({ - notBefore: z.string(), - notAfter: z.string(), - }), -}); - +/** + * A zod schema for an API Gateway Event Identity + * + * @see {@link https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html} + */ const APIGatewayEventIdentity = z.object({ accessKey: z.string().nullish(), accountId: z.string().nullish(), @@ -38,15 +38,27 @@ const APIGatewayEventIdentity = z.object({ clientCert: APIGatewayCert.nullish(), }); +/** + * A zod schema for an API Gateway Event Request Context + * + * @see {@link https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference} + */ const APIGatewayEventRequestContext = z .object({ accountId: z.string(), apiId: z.string(), + deploymentId: z.string().nullish(), authorizer: z - .object({ - claims: z.record(z.string(), z.any()).nullish(), - scopes: z.array(z.string()).nullish(), - }) + .union([ + z.object({ + integrationLatency: z.number(), + principalId: z.string(), + }), + z.object({ + claims: z.record(z.string(), z.any()), + scopes: APIGatewayStringArray.optional(), + }), + ]) .nullish(), stage: z.string(), protocol: z.string(), @@ -88,32 +100,166 @@ const APIGatewayEventRequestContext = z } ); +/** + * A zod schema for an API Gateway Proxy event + * + * @example + * ```json + * { + * "type": "REQUEST", + * "methodArn": "arn:aws:execute-api:us-east-1:123456789012:abcdef123/test/GET/request", + * "resource": "/request", + * "path": "/request", + * "httpMethod": "GET", + * "headers": { + * "X-AMZ-Date": "20170718T062915Z", + * "Accept": "application/json", + * "HeaderAuth1": "headerValue1" + * }, + * "queryStringParameters": { + * "QueryString1": "queryValue1" + * }, + * "pathParameters": {}, + * "stageVariables": null, + * "requestContext": { + * "path": "/request", + * "accountId": "123456789012", + * "resourceId": "05c7jb", + * "stage": "test", + * "requestId": "...", + * "identity": { + * "cognitoIdentityPoolId": null, + * "accountId": null, + * "cognitoIdentityId": null, + * "caller": null, + * "sourceIp": "192.168.1.1", + * "principalOrgId": null, + * "accessKey": null, + * "cognitoAuthenticationType": null, + * "cognitoAuthenticationProvider": null, + * "userArn": null, + * "userAgent": "HTTPie/3.2.2", + * "user": null + * } + * }, + * "resourcePath": "/request", + * "httpMethod": "GET", + * "apiId": "abcdef123" + * } + * ``` + * @see {@link types.APIGatewayProxyEvent | APIGatewayProxyEvent} + * + * @see {@link https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html} + */ const APIGatewayProxyEventSchema = z.object({ - version: z.string().optional(), - authorizationToken: z.string().optional(), - identitySource: z.string().optional(), - methodArn: z.string().optional(), - type: z.enum(['TOKEN', 'REQUEST']).optional(), resource: z.string(), path: z.string(), - httpMethod: z.enum([ - 'GET', - 'POST', - 'PUT', - 'PATCH', - 'DELETE', - 'HEAD', - 'OPTIONS', - ]), - headers: z.record(z.string()).optional(), - queryStringParameters: z.record(z.string()).nullable(), - multiValueHeaders: z.record(z.array(z.string())).optional(), - multiValueQueryStringParameters: z.record(z.array(z.string())).nullable(), + httpMethod: APIGatewayHttpMethod, + headers: APIGatewayRecord.nullish(), + multiValueHeaders: z.record(APIGatewayStringArray).nullish(), + queryStringParameters: APIGatewayRecord.nullable(), + multiValueQueryStringParameters: z.record(APIGatewayStringArray).nullable(), + pathParameters: APIGatewayRecord.nullish(), + stageVariables: APIGatewayRecord.nullish(), requestContext: APIGatewayEventRequestContext, - pathParameters: z.record(z.string()).optional().nullish(), - stageVariables: z.record(z.string()).optional().nullish(), - isBase64Encoded: z.boolean().optional(), body: z.string().nullable(), + isBase64Encoded: z.boolean(), +}); + +/** + * A zod schema for an API Gateway Request Authorizer event + * + * @example + * ```json + * { + * "type": "REQUEST", + * "methodArn": "arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/prod/GET/", + * "resource": "/{proxy+}", + * "path": "/hello/world", + * "httpMethod": "GET", + * "headers": { + * "X-AMZ-Date": "20170718T062915Z", + * "Accept": "application/json", + * "HeaderAuth1": "headerValue1" + * }, + * "multiValueHeaders": { + * "X-AMZ-Date": ["20170718T062915Z"], + * "Accept": ["application/json"], + * "HeaderAuth1": ["headerValue1"] + * }, + * "queryStringParameters": {}, + * "multiValueQueryStringParameters": {}, + * "pathParameters": {}, + * "stageVariables": {}, + * "requestContext": { + * "path": "/request", + * "accountId": "123456789012", + * "resourceId": "05c7jb", + * "stage": "test", + * "requestId": "...", + * "identity": { + * "cognitoIdentityPoolId": null, + * "accountId": null, + * "cognitoIdentityId": null, + * "caller": null, + * "sourceIp": "192.168.1.1", + * "principalOrgId": null, + * "accessKey": null, + * "cognitoAuthenticationType": null, + * "cognitoAuthenticationProvider": null, + * "userArn": null, + * "userAgent": "HTTPie/3.2.2", + * "user": null + * } + * }, + * "domainName": "id.execute-api.us-west-2.amazonaws.com", + * "deploymentId": "lle82z", + * "apiId": "ymy8tbxw7b" + * } + * ``` + * + * @see {@link https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-lambda-authorizer-input.html#w76aac15b9c21c25c21b5} + */ +const APIGatewayRequestAuthorizerEventSchema = z.object({ + type: z.literal('REQUEST'), + methodArn: z.string(), + resource: z.string(), + path: z.string(), + httpMethod: APIGatewayHttpMethod, + headers: APIGatewayRecord, + multiValueHeaders: z.record(APIGatewayStringArray), + queryStringParameters: APIGatewayRecord, + multiValueQueryStringParameters: z.record(APIGatewayStringArray), + pathParameters: APIGatewayRecord, + stageVariables: APIGatewayRecord, + requestContext: APIGatewayEventRequestContext, + domainName: z.string().optional(), + deploymentId: z.string().optional(), + apiId: z.string().optional(), +}); + +/** + * A zod schema for an API Gateway Token Authorizer event + * + * @example + * ```json + * { + * "type": "TOKEN", + * "authorizationToken": "Bearer abcd1234", + * "methodArn": "arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/prod/GET/" + * } + * ``` + * + * @see {@link https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-lambda-authorizer-input.html#w76aac15b9c21c25c21b3} + */ +const APIGatewayTokenAuthorizerEventSchema = z.object({ + type: z.literal('TOKEN'), + authorizationToken: z.string(), + methodArn: z.string(), }); -export { APIGatewayProxyEventSchema, APIGatewayCert }; +export { + APIGatewayProxyEventSchema, + APIGatewayRequestAuthorizerEventSchema, + APIGatewayTokenAuthorizerEventSchema, +}; diff --git a/packages/parser/src/schemas/apigwv2.ts b/packages/parser/src/schemas/apigwv2.ts index 77491d4864..7d7031fc24 100644 --- a/packages/parser/src/schemas/apigwv2.ts +++ b/packages/parser/src/schemas/apigwv2.ts @@ -1,11 +1,48 @@ import { z } from 'zod'; -import { APIGatewayCert } from './apigw.js'; +import { + APIGatewayCert, + APIGatewayHttpMethod, + APIGatewayRecord, + APIGatewayStringArray, +} from './apigw-proxy.js'; -const RequestContextV2Authorizer = z.object({ +/** + * A zod schema for an API Gateway HTTP API Request Authorizer + * + * If Lambda authorizer is used, the `lambda` property will be set to an object + * containing the `context` object returned by the Lambda authorizer function. + * If no `context` object is returned, the `lambda` property will be set to `null`. + * + * If JWT authorizer is used, the `jwt` property will be set to an object + * containing the `claims` object returned by the JWT authorizer function. Optionally, + * the `scopes` property will be set to an array of scopes returned by the JWT authorizer. + * + * @example + * ```json + * { + * "jwt": { + * "claims": { + * "claim1": "value1", + * "claim2": "value2" + * }, + * "scopes": [ + * "scope1", + * "scope2" + * ] + * } + * } + * ``` + * + * If IAM authorizer is used, the `iam` property will be set to an object + * containing the details of the IAM user making the request. + * + * @see {@link https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-access-control.html} + */ +const APIGatewayV2RequestAuthorizer = z.object({ jwt: z .object({ claims: z.record(z.string(), z.any()), - scopes: z.array(z.string()).optional(), + scopes: APIGatewayStringArray.nullable(), }) .optional(), iam: z @@ -18,28 +55,46 @@ const RequestContextV2Authorizer = z.object({ userId: z.string().optional(), cognitoIdentity: z .object({ - amr: z.array(z.string()), + amr: APIGatewayStringArray, identityId: z.string(), identityPoolId: z.string(), }) .nullish(), }) .optional(), - lambda: z.record(z.string(), z.any()).optional(), + lambda: z.record(z.string(), z.any()).nullish(), }); -const RequestContextV2Http = z.object({ - method: z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']), - path: z.string(), - protocol: z.string(), - sourceIp: z.string().ip(), - userAgent: z.string(), -}); - -const RequestContextV2 = z.object({ +/** + * A zod schema for an API Gateway HTTP API Request Context + * + * @example + * ```json + * { + * "accountId": "123456789012", + * "apiId": "api-id", + * "authentication": {} + * "domainName": "id.execute-api.us-east-1.amazonaws.com", + * "domainPrefix": "id", + * "http": { + * "method": "POST", + * "path": "/my/path", + * "protocol": "HTTP/1.1", + * "sourceIp": "...", + * "userAgent": "..." + * }, + * "requestId": "...", + * "routeKey": "$default", + * "stage": "$default", + * "time": "12/Mar/2020:19:03:58 +0000", + * "timeEpoch": 1583348638390 + * } + * ``` + */ +const APIGatewayV2RequestContext = z.object({ accountId: z.string(), apiId: z.string(), - authorizer: RequestContextV2Authorizer.optional(), + authorizer: APIGatewayV2RequestAuthorizer.optional(), authentication: z .object({ clientCert: APIGatewayCert.optional(), @@ -47,7 +102,13 @@ const RequestContextV2 = z.object({ .nullish(), domainName: z.string(), domainPrefix: z.string(), - http: RequestContextV2Http, + http: z.object({ + method: APIGatewayHttpMethod, + path: z.string(), + protocol: z.string(), + sourceIp: z.string().ip(), + userAgent: z.string(), + }), requestId: z.string(), routeKey: z.string(), stage: z.string(), @@ -55,19 +116,133 @@ const RequestContextV2 = z.object({ timeEpoch: z.number(), }); +/** + * A zod schema for an API Gateway HTTP API Proxy event + * + * @example + * ```json + * { + * "version": "2.0", + * "routeKey": "$default", + * "rawPath": "/my/path", + * "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", + * "cookies": ["cookie1", "cookie2"], + * "headers": { + * "header1": "value1", + * "header2": "value1,value2" + * }, + * "queryStringParameters": { + * "parameter1": "value1,value2", + * "parameter2": "value" + * }, + * "requestContext": { + * "accountId": "123456789012", + * "apiId": "api-id", + * "authentication": {} + * "domainName": "id.execute-api.us-east-1.amazonaws.com", + * "domainPrefix": "id", + * "http": { + * "method": "POST", + * "path": "/my/path", + * "protocol": "HTTP/1.1", + * "sourceIp": "...", + * "userAgent": "..." + * }, + * "requestId": "...", + * "routeKey": "$default", + * "stage": "$default", + * "time": "12/Mar/2020:19:03:58 +0000", + * "timeEpoch": 1583348638390 + * }, + * "body": "Hello from Lambda", + * "pathParameters": {}, + * "isBase64Encoded": false, + * "stageVariables": {} + * } + * ``` + * + * @see {@link https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html} + */ const APIGatewayProxyEventV2Schema = z.object({ version: z.string(), routeKey: z.string(), rawPath: z.string(), rawQueryString: z.string(), - cookies: z.array(z.string()).optional(), - headers: z.record(z.string()), - queryStringParameters: z.record(z.string()).optional(), - pathParameters: z.record(z.string()).optional().nullish(), - stageVariables: z.record(z.string()).optional().nullish(), - requestContext: RequestContextV2, + cookies: APIGatewayStringArray.optional(), + headers: APIGatewayRecord, + queryStringParameters: APIGatewayRecord.optional(), + requestContext: APIGatewayV2RequestContext, body: z.string().optional(), + pathParameters: APIGatewayRecord.nullish(), isBase64Encoded: z.boolean(), + stageVariables: APIGatewayRecord.nullish(), +}); + +/** + * A zod schema for an API Gateway HTTP API Request Authorizer event + * + * @example + * ```json + * { + * "version": "2.0", + * "type": "REQUEST", + * "routeArn": "arn:aws:execute-api:us-east-1:123456789012:api-id/stage-name/GET/mydemoresource", + * "identitySource": ["user1", "123"], + * "routeKey": "$default", + * "rawPath": "/mydemoresource", + * "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", + * "cookies": ["cookie1", "cookie2"], + * "headers": { + * "header1": "value1", + * "header2": "value1,value2" + * }, + * "queryStringParameters": { + * "parameter1": "value1,value2", + * "parameter2": "value" + * }, + * "requestContext": { + * "accountId": "123456789012", + * "apiId": "api-id", + * "authentication": {} + * "domainName": "id.execute-api.us-east-1.amazonaws.com", + * "domainPrefix": "id", + * "http": { + * "method": "POST", + * "path": "/my/path", + * "protocol": "HTTP/1.1", + * "sourceIp": "...", + * "userAgent": "..." + * }, + * "requestId": "...", + * "routeKey": "$default", + * "stage": "$default", + * "time": "12/Mar/2020:19:03:58 +0000", + * "timeEpoch": 1583348638390 + * }, + * "pathParameters": {}, + * "stageVariables": {} + * } + * ``` + * + * @see {@link https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html} + */ +const APIGatewayRequestAuthorizerEventV2Schema = z.object({ + version: z.literal('2.0'), + type: z.literal('REQUEST'), + routeArn: z.string(), + identitySource: APIGatewayStringArray, + routeKey: z.string(), + rawPath: z.string(), + rawQueryString: z.string(), + cookies: APIGatewayStringArray.optional(), + headers: APIGatewayRecord.optional(), + queryStringParameters: APIGatewayRecord.optional(), + requestContext: APIGatewayV2RequestContext, + pathParameters: APIGatewayRecord.nullish(), + stageVariables: APIGatewayRecord.nullish(), }); -export { APIGatewayProxyEventV2Schema }; +export { + APIGatewayProxyEventV2Schema, + APIGatewayRequestAuthorizerEventV2Schema, +}; diff --git a/packages/parser/src/schemas/cloudformation-custom-resource.ts b/packages/parser/src/schemas/cloudformation-custom-resource.ts index 84369dbdae..cb18cad58c 100644 --- a/packages/parser/src/schemas/cloudformation-custom-resource.ts +++ b/packages/parser/src/schemas/cloudformation-custom-resource.ts @@ -10,6 +10,28 @@ const CloudFormationCustomResourceBaseSchema = z.object({ ResourceProperties: z.record(z.any()), }); +/** + * Zod schema for CloudFormation Custom Resource event with RequestType = 'Create' + * + * @example + * ```json + * { + * "RequestType": "Create", + * "ServiceToken": "arn:aws:lambda:us-east-1:xxx:function:xxxx-CrbuiltinfunctionidProvi-2vKAalSppmKe", + * "ResponseURL": "https://cloudformation-custom-resource-response-useast1.s3.amazonaws.com/7F%7Cb1f50fdfc25f3b", + * "StackId": "arn:aws:cloudformation:us-east-1:xxxx:stack/xxxx/271845b0-f2e8-11ed-90ac-0eeb25b8ae21", + * "RequestId": "xxxxx-d2a0-4dfb-ab1f-xxxxxx", + * "LogicalResourceId": "xxxxxxxxx", + * "ResourceType": "Custom::MyType", + * "ResourceProperties": { + * "ServiceToken": "arn:aws:lambda:us-east-1:xxxxx:function:xxxxx", + * "MyProps": "ss" + * } + * } + * ``` + * @see {@link types.CloudFormationCustomResourceCreateEvent | CloudFormationCustomResourceCreateEvent} + * @see {@link https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/crpg-ref-requesttypes-create.html} + */ const CloudFormationCustomResourceCreateSchema = CloudFormationCustomResourceBaseSchema.merge( z.object({ @@ -17,6 +39,28 @@ const CloudFormationCustomResourceCreateSchema = }) ); +/** + * Zod schema for CloudFormation Custom Resource event with RequestType = 'Delete' + * + * @example + * ```json + * { + * "RequestType": "Delete", + * "ServiceToken": "arn:aws:lambda:us-east-1:xxx:function:xxxx-CrbuiltinfunctionidProvi-2vKAalSppmKe", + * "ResponseURL": "https://cloudformation-custom-resource-response-useast1.s3.amazonaws.com/7F%7Cb1f50fdfc25f3b", + * "StackId": "arn:aws:cloudformation:us-east-1:xxxx:stack/xxxx/271845b0-f2e8-11ed-90ac-0eeb25b8ae21", + * "RequestId": "xxxxx-d2a0-4dfb-ab1f-xxxxxx", + * "LogicalResourceId": "xxxxxxxxx", + * "ResourceType": "Custom::MyType", + * "ResourceProperties": { + * "ServiceToken": "arn:aws:lambda:us-east-1:xxxxx:function:xxxxx", + * "MyProps": "ss" + * } + * } + * ``` + * @see {@link types.CloudFormationCustomResourceDeleteEvent | CloudFormationCustomResourceDeleteEvent} + * @see {@link https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/crpg-ref-requesttypes-delete.html} + */ const CloudFormationCustomResourceDeleteSchema = CloudFormationCustomResourceBaseSchema.merge( z.object({ @@ -24,6 +68,32 @@ const CloudFormationCustomResourceDeleteSchema = }) ); +/** + * Zod schema for CloudFormation Custom Resource event with RequestType = 'Update' + * + * @example + * ```json + * { + * "RequestType": "Update", + * "ServiceToken": "arn:aws:lambda:us-east-1:xxx:function:xxxx-CrbuiltinfunctionidProvi-2vKAalSppmKe", + * "ResponseURL": "https://cloudformation-custom-resource-response-useast1.s3.amazonaws.com/7F%7Cb1f50fdfc25f3b", + * "StackId": "arn:aws:cloudformation:us-east-1:xxxx:stack/xxxx/271845b0-f2e8-11ed-90ac-0eeb25b8ae21", + * "RequestId": "xxxxx-d2a0-4dfb-ab1f-xxxxxx", + * "LogicalResourceId": "xxxxxxxxx", + * "ResourceType": "Custom::MyType", + * "ResourceProperties": { + * "ServiceToken": "arn:aws:lambda:us-east-1:xxxxx:function:xxxxx", + * "MyProps": "new" + * }, + * "OldResourceProperties": { + * "ServiceToken": "arn:aws:lambda:us-east-1:xxxxx:function:xxxxx-xxxx-xxx", + * "MyProps": "old" + * } + * } + * ``` + * @see {@link types.CloudFormationCustomResourceUpdateEvent | CloudFormationCustomResourceUpdateEvent} + * @see {@link https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/crpg-ref-requesttypes-update.html} + */ const CloudFormationCustomResourceUpdateSchema = CloudFormationCustomResourceBaseSchema.merge( z.object({ diff --git a/packages/parser/src/schemas/cloudwatch.ts b/packages/parser/src/schemas/cloudwatch.ts index 2694507b04..941ea6330e 100644 --- a/packages/parser/src/schemas/cloudwatch.ts +++ b/packages/parser/src/schemas/cloudwatch.ts @@ -24,6 +24,52 @@ const decompressRecordToJSON = ( return CloudWatchLogsDecodeSchema.parse(JSON.parse(uncompressed)); }; +/** + * Zod schema for CloudWatch Logs. + * + * @example + * ```json + * { + * "awslogs": { + * "data": "H4sIAAAAAAAAAHWPwQqCQBCGX0Xm7EFtK+smZBEUgXoLCdMhFtKV3akI8d0bLYmibvPPN3wz00CJxmQnTO41whwWQRIctmEcB6sQbFC3CjW3XW8kxpOpP+OC22d1Wml1qZkQGtoMsScxaczKN3plG8zlaHIta5KqWsozoTYw3/djzwhpLwivWFGHGpAFe7DL68JlBUk+l7KSN7tCOEJ4M3/qOI49vMHj+zCKdlFqLaU2ZHV2a4Ct/an0/ivdX8oYc1UVX860fQDQiMdxRQEAAA==" + * } + * } + * ``` + * The `data` field compressed JSON string, once transformed the payload will look like: + * + * @example + * ```json + * { + * "owner": "123456789012", + * "logGroup": "CloudTrail", + * "logStream": "123456789012_CloudTrail_us-east-1", + * "subscriptionFilters": [ + * "Destination" + * ], + * "messageType": "DATA_MESSAGE", + * "logEvents": [ + * { + * "id": "31953106606966983378809025079804211143289615424298221568", + * "timestamp": 1432826855000, + * "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" + * }, + * { + * "id": "31953106606966983378809025079804211143289615424298221569", + * "timestamp": 1432826855000, + * "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" + * }, + * { + * "id": "31953106606966983378809025079804211143289615424298221570", + * "timestamp": 1432826855000, + * "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" + * } + * ] + * } + * ``` + * + * @see {@link types.CloudWatchLogsEvent | CloudWatchLogsEvent} + * @see {@link https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html#LambdaFunctionExample} + */ const CloudWatchLogsSchema = z.object({ awslogs: z.object({ data: z.string().transform((data) => decompressRecordToJSON(data)), diff --git a/packages/parser/src/schemas/dynamodb.ts b/packages/parser/src/schemas/dynamodb.ts index 011ff85f8a..e33b003535 100644 --- a/packages/parser/src/schemas/dynamodb.ts +++ b/packages/parser/src/schemas/dynamodb.ts @@ -31,6 +31,81 @@ const DynamoDBStreamRecord = z.object({ userIdentity: UserIdentity.optional(), }); +/** + * Zod schema for Amazon DynamoDB Stream event. + * + * @example + * ```json + * { + * "Records": [ + * { + * "eventID": "1", + * "eventVersion": "1.0", + * "dynamodb": { + * "ApproximateCreationDateTime": 1693997155.0, + * "Keys": { + * "Id": { + * "N": "101" + * } + * }, + * "NewImage": { + * "Message": { + * "S": "New item!" + * }, + * "Id": { + * "N": "101" + * } + * }, + * "StreamViewType": "NEW_AND_OLD_IMAGES", + * "SequenceNumber": "111", + * "SizeBytes": 26 + * }, + * "awsRegion": "us-west-2", + * "eventName": "INSERT", + * "eventSourceARN": "eventsource_arn", + * "eventSource": "aws:dynamodb" + * }, + * { + * "eventID": "2", + * "eventVersion": "1.0", + * "dynamodb": { + * "OldImage": { + * "Message": { + * "S": "New item!" + * }, + * "Id": { + * "N": "101" + * } + * }, + * "SequenceNumber": "222", + * "Keys": { + * "Id": { + * "N": "101" + * } + * }, + * "SizeBytes": 59, + * "NewImage": { + * "Message": { + * "S": "This item has changed" + * }, + * "Id": { + * "N": "101" + * } + * }, + * "StreamViewType": "NEW_AND_OLD_IMAGES" + * }, + * "awsRegion": "us-west-2", + * "eventName": "MODIFY", + * "eventSourceARN": "source_arn", + * "eventSource": "aws:dynamodb" + * } + * ] + * } + * ``` + * + * @see {@link types.DynamoDBStreamEvent | DynamoDBStreamEvent} + * @see {@link https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html} + */ const DynamoDBStreamSchema = z.object({ Records: z.array(DynamoDBStreamRecord), }); diff --git a/packages/parser/src/schemas/eventbridge.ts b/packages/parser/src/schemas/eventbridge.ts index 9c509e5c03..82b3a48674 100644 --- a/packages/parser/src/schemas/eventbridge.ts +++ b/packages/parser/src/schemas/eventbridge.ts @@ -1,5 +1,32 @@ import { z } from 'zod'; +/** + * Zod schema for EventBridge event + * + * @example + * ```json + * { + * "version": "0", + * "id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718", + * "detail-type": "EC2 Instance State-change Notification", + * "source": "aws.ec2", + * "account": "111122223333", + * "time": "2017-12-22T18:43:48Z", + * "region": "us-west-1", + * "resources": [ + * "arn:aws:ec2:us-west-1:123456789012:instance/i-1234567890abcdef0" + * ], + * "detail": { + * "instance_id": "i-1234567890abcdef0", + * "state": "terminated" + * }, + * "replay-name": "replay_archive" + * } + * ``` + * + * @see {@link types.EventBridgeEvent | EventBridgeEvent} + * @see {@link https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-events.html} + */ const EventBridgeSchema = z.object({ version: z.string(), id: z.string(), diff --git a/packages/parser/src/schemas/index.ts b/packages/parser/src/schemas/index.ts index ff56350195..e4044d8e9d 100644 --- a/packages/parser/src/schemas/index.ts +++ b/packages/parser/src/schemas/index.ts @@ -1,6 +1,13 @@ export { AlbSchema, AlbMultiValueHeadersSchema } from './alb.js'; -export { APIGatewayProxyEventSchema } from './apigw.js'; -export { APIGatewayProxyEventV2Schema } from './apigwv2.js'; +export { + APIGatewayProxyEventSchema, + APIGatewayRequestAuthorizerEventSchema, + APIGatewayTokenAuthorizerEventSchema, +} from './apigw.js'; +export { + APIGatewayProxyEventV2Schema, + APIGatewayRequestAuthorizerEventV2Schema, +} from './apigwv2.js'; export { CloudFormationCustomResourceCreateSchema, CloudFormationCustomResourceDeleteSchema, diff --git a/packages/parser/src/schemas/kafka.ts b/packages/parser/src/schemas/kafka.ts index 08bd5d03ab..067346f123 100644 --- a/packages/parser/src/schemas/kafka.ts +++ b/packages/parser/src/schemas/kafka.ts @@ -32,10 +32,98 @@ const KafkaBaseEventSchema = z.object({ records: z.record(z.string(), z.array(KafkaRecordSchema)), }); +/** Zod schema for Kafka event from Self Managed Kafka + * + * @example + * ```json + * { + * "eventSource":"aws:SelfManagedKafka", + * "bootstrapServers":"b-2.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092,b-1.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092", + * "records":{ + * "mytopic-0":[ + * { + * "topic":"mytopic", + * "partition":0, + * "offset":15, + * "timestamp":1545084650987, + * "timestampType":"CREATE_TIME", + * "key":"cmVjb3JkS2V5", + * "value":"eyJrZXkiOiJ2YWx1ZSJ9", + * "headers":[ + * { + * "headerKey":[ + * 104, + * 101, + * 97, + * 100, + * 101, + * 114, + * 86, + * 97, + * 108, + * 117, + * 101 + * ] + * } + * ] + * } + * ] + * } + * } + * ``` + * + * @see {@link types.KafkaSelfManagedEvent | KafkaSelfManagedEvent} + * @see {@link https://docs.aws.amazon.com/lambda/latest/dg/with-kafka.html} + */ const KafkaSelfManagedEventSchema = KafkaBaseEventSchema.extend({ eventSource: z.literal('aws:SelfManagedKafka'), }); +/** + * Zod schema for Kafka event from MSK + * + * @example + * ```json + * { + * "eventSource":"aws:kafka", + * "eventSourceArn":"arn:aws:kafka:us-east-1:0123456789019:cluster/SalesCluster/abcd1234-abcd-cafe-abab-9876543210ab-4", + * "bootstrapServers":"b-2.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092,b-1.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092", + * "records":{ + * "mytopic-0":[ + * { + * "topic":"mytopic", + * "partition":0, + * "offset":15, + * "timestamp":1545084650987, + * "timestampType":"CREATE_TIME", + * "key":"cmVjb3JkS2V5", + * "value":"eyJrZXkiOiJ2YWx1ZSJ9", + * "headers":[ + * { + * "headerKey":[ + * 104, + * 101, + * 97, + * 100, + * 101, + * 114, + * 86, + * 97, + * 108, + * 117, + * 101 + * ] + * } + * ] + * } + * ] + * } + * } + * ``` + * + * @see {@link types.KafkaMskEvent | KafkaMskEvent} + * @see {@link https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html} + */ const KafkaMskEventSchema = KafkaBaseEventSchema.extend({ eventSource: z.literal('aws:kafka'), eventSourceArn: z.string(), diff --git a/packages/parser/src/schemas/kinesis-firehose.ts b/packages/parser/src/schemas/kinesis-firehose.ts index e541cc3f65..57d7d5a2ae 100644 --- a/packages/parser/src/schemas/kinesis-firehose.ts +++ b/packages/parser/src/schemas/kinesis-firehose.ts @@ -40,10 +40,73 @@ const KinesisFirehoseSqsRecord = KinesisFireHoseRecordBase.extend({ }), }); +/** + * Zod schema for Kinesis Firehose events + * + * @example + * ```json + * { + * "invocationId": "2b4d1ad9-2f48-94bd-a088-767c317e994a", + * "sourceKinesisStreamArn": "arn:aws:kinesis:us-east-1:123456789012:stream/kinesis-source", + * "deliveryStreamArn": "arn:aws:firehose:us-east-2:123456789012:deliverystream/delivery-stream-name", + * "region": "us-east-2", + * "records": [ + * { + * "data": "SGVsbG8gV29ybGQ=", + * "recordId": "record1", + * "approximateArrivalTimestamp": 1664028820148, + * "kinesisRecordMetadata": { + * "shardId": "shardId-000000000000", + * "partitionKey": "4d1ad2b9-24f8-4b9d-a088-76e9947c317a", + * "approximateArrivalTimestamp": 1664028820148, + * "sequenceNumber": "49546986683135544286507457936321625675700192471156785154", + * "subsequenceNumber": 0 + * } + * }, + * { + * "data": "eyJIZWxsbyI6ICJXb3JsZCJ9", + * "recordId": "record2", + * "approximateArrivalTimestamp": 1664028793294, + * "kinesisRecordMetadata": { + * "shardId": "shardId-000000000001", + * "partitionKey": "4d1ad2b9-24f8-4b9d-a088-76e9947c318a", + * "approximateArrivalTimestamp": 1664028793294, + * "sequenceNumber": "49546986683135544286507457936321625675700192471156785155", + * "subsequenceNumber": 0 + * } + * } + * ] + * } + * ``` + * + * @see {@link types.KinesisFireHoseEvent | KinesisFireHoseEvent} + * @see {@link https://docs.aws.amazon.com/lambda/latest/dg/services-kinesisfirehose.html} + */ const KinesisFirehoseSchema = KinesisFireHoseBaseSchema.extend({ records: z.array(KinesisFirehoseRecord), }); +/** + * Zod schema for Kinesis Firehose events with SQS records + * + * @example + * ```json + * { + * "invocationId": "556b67a3-48fc-4385-af49-e133aade9cb9", + * "deliveryStreamArn": "arn:aws:firehose:us-east-1:123456789012:deliverystream/PUT-S3-tdyyE", + * "region": "us-east-1", + * "records": [ + * { + * "recordId": "49640912821178817833517986466168945147170627572855734274000000", + * "approximateArrivalTimestamp": 1684864917398, + * "data": "eyJtZXNzYWdlSWQiOiI1YWI4MDdkNC01NjQ0LTRjNTUtOTdhMy00NzM5NjYzNWFjNzQiLCJyZWNlaXB0SGFuZGxlIjoiQVFFQndKbkt5ckhpZ1VNWmo2cllpZ0NneGxhUzNTTHkwYS4uLiIsImJvZHkiOiJUZXN0IG1lc3NhZ2UuIiwiYXR0cmlidXRlcyI6eyJBcHByb3hpbWF0ZVJlY2VpdmVDb3VudCI6IjEiLCJTZW50VGltZXN0YW1wIjoiMTY4NDg2NDg1MjQ5MSIsIlNlbmRlcklkIjoiQUlEQUlFTlFaSk9MTzIzWVZKNFZPIiwiQXBwcm94aW1hdGVGaXJzdFJlY2VpdmVUaW1lc3RhbXAiOiIxNjg0ODY0ODcyNDkxIn0sIm1lc3NhZ2VBdHRyaWJ1dGVzIjp7fSwibWQ1T2ZNZXNzYWdlQXR0cmlidXRlcyI6bnVsbCwibWQ1T2ZCb2R5IjoiYzhiNmJjNjBjOGI4YjNhOTA0ZTQ1YzFmYWJkZjUyM2QiLCJldmVudFNvdXJjZSI6ImF3czpzcXMiLCJldmVudFNvdXJjZUFSTiI6ImFybjphd3M6c3FzOnVzLWVhc3QtMToyMDA5ODQxMTIzODY6U05TIiwiYXdzUmVnaW9uIjoidXMtZWFzdC0xIn0K" + * } + * ] + * } + * ``` + * + * @see {@link types.KinesisFireHoseSqsEvent | KinesisFireHoseSqsEvent} + */ const KinesisFirehoseSqsSchema = KinesisFireHoseBaseSchema.extend({ records: z.array(KinesisFirehoseSqsRecord), }); diff --git a/packages/parser/src/schemas/kinesis.ts b/packages/parser/src/schemas/kinesis.ts index fbd734297e..041b378f6a 100644 --- a/packages/parser/src/schemas/kinesis.ts +++ b/packages/parser/src/schemas/kinesis.ts @@ -36,6 +36,52 @@ const KinesisDataStreamRecord = z.object({ kinesis: KinesisDataStreamRecordPayload, }); +/** + * Zod schema for Kinesis Data Stream event + * + * @example + * ```json + * { + * "Records": [ + * { + * "kinesis": { + * "kinesisSchemaVersion": "1.0", + * "partitionKey": "1", + * "sequenceNumber": "49590338271490256608559692538361571095921575989136588898", + * "data": "SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==", + * "approximateArrivalTimestamp": 1545084650.987 + * }, + * "eventSource": "aws:kinesis", + * "eventVersion": "1.0", + * "eventID": "shardId-000000000006:49590338271490256608559692538361571095921575989136588898", + * "eventName": "aws:kinesis:record", + * "invokeIdentityArn": "arn:aws:iam::123456789012:role/lambda-role", + * "awsRegion": "us-east-2", + * "eventSourceARN": "arn:aws:kinesis:us-east-2:123456789012:stream/lambda-stream" + * }, + * { + * "kinesis": { + * "kinesisSchemaVersion": "1.0", + * "partitionKey": "1", + * "sequenceNumber": "49590338271490256608559692540925702759324208523137515618", + * "data": "VGhpcyBpcyBvbmx5IGEgdGVzdC4=", + * "approximateArrivalTimestamp": 1545084711.166 + * }, + * "eventSource": "aws:kinesis", + * "eventVersion": "1.0", + * "eventID": "shardId-000000000006:49590338271490256608559692540925702759324208523137515618", + * "eventName": "aws:kinesis:record", + * "invokeIdentityArn": "arn:aws:iam::123456789012:role/lambda-role", + * "awsRegion": "us-east-2", + * "eventSourceARN": "arn:aws:kinesis:us-east-2:123456789012:stream/lambda-stream" + * } + * ] + * } + *``` + * @see {@link types.KinesisDataStreamEvent | KinesisDataStreamEvent} + * @see {@link https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html#services-kinesis-event-example} + * + */ const KinesisDataStreamSchema = z.object({ Records: z.array(KinesisDataStreamRecord), }); diff --git a/packages/parser/src/schemas/lambda.ts b/packages/parser/src/schemas/lambda.ts index e8e72be255..0530f56d67 100644 --- a/packages/parser/src/schemas/lambda.ts +++ b/packages/parser/src/schemas/lambda.ts @@ -1,13 +1,63 @@ import { APIGatewayProxyEventV2Schema } from './apigwv2.js'; /** - * Lambda Function URL follows the API Gateway HTTP APIs Payload Format Version 2.0. + * Zod schema for Lambda Function URL follows the API Gateway HTTP APIs Payload Format Version 2.0. * * Keys related to API Gateway features not available in Function URL use a sentinel value (e.g.`routeKey`, `stage`). - * Documentation: - * - https://docs.aws.amazon.com/lambda/latest/dg/urls-configuration.html - * - https://docs.aws.amazon.com/lambda/latest/dg/urls-invocation.html#urls-payloads * + * @example + * ```json + * { + * "version": "2.0", + * "routeKey": "$default", + * "rawPath": "/", + * "rawQueryString": "", + * "headers": { + * "sec-fetch-mode": "navigate", + * "x-amzn-tls-version": "TLSv1.2", + * "sec-fetch-site": "cross-site", + * "accept-language": "pt-BR,pt;q=0.9", + * "x-forwarded-proto": "https", + * "x-forwarded-port": "443", + * "x-forwarded-for": "123.123.123.123", + * "sec-fetch-user": "?1", + * "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng;q=0.8,application/signed-exchange;v=b3;q=0.9", + * "x-amzn-tls-cipher-suite": "ECDHE-RSA-AES128-GCM-SHA256", + * "sec-ch-ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"102\", \"Google Chrome\";v=\"102\"", + * "sec-ch-ua-mobile": "?0", + * "x-amzn-trace-id": "Root=1-62ecd163-5f302e550dcde3b12402207d", + * "sec-ch-ua-platform": "\"Linux\"", + * "host": ".lambda-url.us-east-1.on.aws", + * "upgrade-insecure-requests": "1", + * "cache-control": "max-age=0", + * "accept-encoding": "gzip, deflate, br", + * "sec-fetch-dest": "document", + * "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36" + * }, + * "requestContext": { + * "accountId": "anonymous", + * "apiId": "", + * "domainName": ".lambda-url.us-east-1.on.aws", + * "domainPrefix": "", + * "http": { + * "method": "GET", + * "path": "/", + * "protocol": "HTTP/1.1", + * "sourceIp": "123.123.123.123", + * "userAgent": "agent" + * }, + * "requestId": "id", + * "routeKey": "$default", + * "stage": "$default", + * "time": "05/Aug/2022:08:14:39 +0000", + * "timeEpoch": 1659687279885 + * }, + * "isBase64Encoded": false + * } + * ``` + * + * @see {@link types.LambdaFunctionUrlEvent | LambdaFunctionUrlEvent} + * @see {@link https://docs.aws.amazon.com/lambda/latest/dg/urls-invocation.html#urls-payloads} */ const LambdaFunctionUrlSchema = APIGatewayProxyEventV2Schema.extend({}); diff --git a/packages/parser/src/schemas/s3.ts b/packages/parser/src/schemas/s3.ts index ccc8fca155..38729824b2 100644 --- a/packages/parser/src/schemas/s3.ts +++ b/packages/parser/src/schemas/s3.ts @@ -88,10 +88,95 @@ const S3EventNotificationEventBridgeDetailSchema = z.object({ 'destination-access-tier': z.string().optional(), }); +/** + * Zod schema for S3 -> EventBridge -> Lambda event notification. + * + * @example + * ```json + * { + * "version": "0", + * "id": "f5f1e65c-dc3a-93ca-6c1e-b1647eac7963", + * "detail-type": "Object Created", + * "source": "aws.s3", + * "account": "123456789012", + * "time": "2023-03-08T17:50:14Z", + * "region": "eu-west-1", + * "resources": [ + * "arn:aws:s3:::example-bucket" + * ], + * "detail": { + * "version": "0", + * "bucket": { + * "name": "example-bucket" + * }, + * "object": { + * "key": "IMG_m7fzo3.jpg", + * "size": 184662, + * "etag": "4e68adba0abe2dc8653dc3354e14c01d", + * "sequencer": "006408CAD69598B05E" + * }, + * "request-id": "57H08PA84AB1JZW0", + * "requester": "123456789012", + * "source-ip-address": "34.252.34.74", + * "reason": "PutObject" + * } + * } + * ``` + * + * @see {@link types.S3EventNotificationEventBridge | S3EventNotificationEventBridge } + * @see {@link https://docs.aws.amazon.com/AmazonS3/latest/userguide/ev-events.html#ev-events-list} + */ const S3EventNotificationEventBridgeSchema = EventBridgeSchema.extend({ detail: S3EventNotificationEventBridgeDetailSchema, }); +/** + * Zod schema for S3 event + * + * @example + * ```json + * { + * "Records": [ + * { + * "eventVersion": "2.1", + * "eventSource": "aws:s3", + * "awsRegion": "us-east-2", + * "eventTime": "2019-09-03T19:37:27.192Z", + * "eventName": "ObjectCreated:Put", + * "userIdentity": { + * "principalId": "AWS:AIDAINPONIXQXHT3IKHL2" + * }, + * "requestParameters": { + * "sourceIPAddress": "205.255.255.255" + * }, + * "responseElements": { + * "x-amz-request-id": "D82B88E5F771F645", + * "x-amz-id-2": "vlR7PnpV2Ce81l0PRw6jlUpck7Jo5ZsQjryTjKlc5aLWGVHPZLj5NeC6qMa0emYBDXOo6QBU0Wo=" + * }, + * "s3": { + * "s3SchemaVersion": "1.0", + * "configurationId": "828aa6fc-f7b5-4305-8584-487c791949c1", + * "bucket": { + * "name": "lambda-artifacts-deafc19498e3f2df", + * "ownerIdentity": { + * "principalId": "A3I5XTEXAMAI3E" + * }, + * "arn": "arn:aws:s3:::lambda-artifacts-deafc19498e3f2df" + * }, + * "object": { + * "key": "b21b84d653bb07b05b1e6b33684dc11b", + * "size": 1305107, + * "eTag": "b21b84d653bb07b05b1e6b33684dc11b", + * "sequencer": "0C0F6F405D6ED209E1" + * } + * } + * } + * ] + * } + * ``` + * @see {@link types.S3Event | S3Event } + * @see {@link https://docs.aws.amazon.com/AmazonS3/latest/userguide/notification-content-structure.html} + */ const S3Schema = z.object({ Records: z.array(S3RecordSchema), }); @@ -100,6 +185,36 @@ const S3SqsEventNotificationRecordSchema = SqsRecordSchema.extend({ body: z.string(), }); +/** + * Zod schema for S3 -> SQS -> Lambda event notification. + * + * @example + * ```json + * { + * "Records": [ + * { + * "messageId": "ca3e7a89-c358-40e5-8aa0-5da01403c267", + * "receiptHandle": "AQEBE7XoI7IQRLF7SrpiW9W4BanmOWe8UtVDbv6/CEZYKf/OktSNIb4j689tQfR4k44V/LY20lZ5VpxYt2GTYCsSLKTcBalTJaRX9CKu/hVqy/23sSNiKxnP56D+VLSn+hU275+AP1h4pUL0d9gLdRB2haX8xiM+LcGfis5Jl8BBXtoxKRF60O87O9/NvCmmXLeqkJuexfyEZNyed0fFCRXFXSjbmThG0OIQgcrGI8glBRGPA8htns58VtXFsSaPYNoqP3p5n6+ewKKVLD0lfm+0DlnLKRa+mjvFBaSer9KK1ff+Aq6zJ6HynPwADj+aF70Hwimc2zImYe51SLEF/E2csYlMNZYI/2qXW0m9R7wJ/XDTV4g2+h+BMTxsKnJQ6NQd", + * "body": "{\"Records\":[{\"eventVersion\":\"2.1\",\"eventSource\":\"aws:s3\",\"awsRegion\":\"us-east-1\",\"eventTime\":\"2023-04-12T20:43:38.021Z\",\"eventName\":\"ObjectCreated:Put\",\"userIdentity\":{\"principalId\":\"A1YQ72UWCM96UF\"},\"requestParameters\":{\"sourceIPAddress\":\"93.108.161.96\"},\"responseElements\":{\"x-amz-request-id\":\"YMSSR8BZJ2Y99K6P\",\"x-amz-id-2\":\"6ASrUfj5xpn859fIq+6FXflOex/SKl/rjfiMd7wRzMg/zkHKR22PDpnh7KD3uq//cuOTbdX4DInN5eIs+cR0dY1z2Mc5NDP/\"},\"s3\":{\"s3SchemaVersion\":\"1.0\",\"configurationId\":\"SNS\",\"bucket\":{\"name\":\"xxx\",\"ownerIdentity\":{\"principalId\":\"A1YQ72UWCM96UF\"},\"arn\":\"arn:aws:s3:::xxx\"},\"object\":{\"key\":\"test.pdf\",\"size\":104681,\"eTag\":\"2e3ad1e983318bbd8e73b080e2997980\",\"versionId\":\"yd3d4HaWOT2zguDLvIQLU6ptDTwKBnQV\",\"sequencer\":\"00643717F9F8B85354\"}}}]}", + * "attributes": { + * "ApproximateReceiveCount": "1", + * "SentTimestamp": "1681332219270", + * "SenderId": "AIDAJHIPRHEMV73VRJEBU", + * "ApproximateFirstReceiveTimestamp": "1681332239270" + * }, + * "messageAttributes": { + * }, + * "md5OfBody": "16f4460f4477d8d693a5abe94fdbbd73", + * "eventSource": "aws:sqs", + * "eventSourceARN": "arn:aws:sqs:us-east-1:123456789012:SQS", + * "awsRegion": "us-east-1" + * } + * ] + * } + * ``` + * + * @see {@link types.S3SqsEventNotification | S3SqsEventNotification } + */ const S3SqsEventNotificationSchema = z.object({ Records: z.array(S3SqsEventNotificationRecordSchema), }); @@ -147,6 +262,46 @@ const S3ObjectUserIdentity = z.object({ sessionContext: S3ObjectSessionContext.optional(), }); +/** + * Zod schema for S3 IAM Access Point Lambda event notification. + * + * @example + * ```json + * { + * "xAmzRequestId": "1a5ed718-5f53-471d-b6fe-5cf62d88d02a", + * "getObjectContext": { + * "inputS3Url": "https://myap-123412341234.s3-accesspoint.us-east-1.amazonaws.com/s3.txt?X-Amz-Security-Token=...", + * "outputRoute": "io-iad-cell001", + * "outputToken": "..." + * }, + * "configuration": { + * "accessPointArn": "arn:aws:s3-object-lambda:us-east-1:123412341234:accesspoint/myolap", + * "supportingAccessPointArn": "arn:aws:s3:us-east-1:123412341234:accesspoint/myap", + * "payload": "test" + * }, + * "userRequest": { + * "url": "/https/github.com/s3.txt", + * "headers": { + * "Host": "myolap-123412341234.s3-object-lambda.us-east-1.amazonaws.com", + * "Accept-Encoding": "identity", + * "X-Amz-Content-SHA256": "e3b0c44297fc1c149afbf4c8995fb92427ae41e4649b934ca495991b7852b855" + * } + * }, + * "userIdentity": { + * "type": "IAMUser", + * "principalId": "...", + * "arn": "arn:aws:iam::123412341234:user/myuser", + * "accountId": "123412341234", + * "accessKeyId": "...", + * "userName": "Alice" + * }, + * "protocolVersion": "1.00" + * } + * ``` + * + * @see {@link https://docs.aws.amazon.com/AmazonS3/latest/userguide/olap-event-context.html} + * @see {@link types.S3ObjectLambdaEvent | S3ObjectLambdaEvent } + */ const S3ObjectLambdaEventSchema = z.object({ xAmzRequestId: z.string(), getObjectContext: S3ObjectContext, diff --git a/packages/parser/src/schemas/ses.ts b/packages/parser/src/schemas/ses.ts index 254d3de255..c065f2e639 100644 --- a/packages/parser/src/schemas/ses.ts +++ b/packages/parser/src/schemas/ses.ts @@ -58,8 +58,119 @@ const SesRecordSchema = z.object({ ses: SesMessage, }); +/** + * Zod schema for SES events from AWS. + * + * @example + * ```json + * { + * "Records": [ + * { + * "eventVersion": "1.0", + * "ses": { + * "mail": { + * "commonHeaders": { + * "from": [ + * "Jane Doe " + * ], + * "to": [ + * "johndoe@example.com" + * ], + * "returnPath": "janedoe@example.com", + * "messageId": "<0123456789example.com>", + * "date": "Wed, 7 Oct 2015 12:34:56 -0700", + * "subject": "Test Subject" + * }, + * "source": "janedoe@example.com", + * "timestamp": "1970-01-01T00:00:00.000Z", + * "destination": [ + * "johndoe@example.com" + * ], + * "headers": [ + * { + * "name": "Return-Path", + * "value": "" + * }, + * { + * "name": "Received", + * "value": "from mailer.example.com (mailer.example.com [203.0.113.1]) by ..." + * }, + * { + * "name": "DKIM-Signature", + * "value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=example; ..." + * }, + * { + * "name": "MIME-Version", + * "value": "1.0" + * }, + * { + * "name": "From", + * "value": "Jane Doe " + * }, + * { + * "name": "Date", + * "value": "Wed, 7 Oct 2015 12:34:56 -0700" + * }, + * { + * "name": "Message-ID", + * "value": "<0123456789example.com>" + * }, + * { + * "name": "Subject", + * "value": "Test Subject" + * }, + * { + * "name": "To", + * "value": "johndoe@example.com" + * }, + * { + * "name": "Content-Type", + * "value": "text/plain; charset=UTF-8" + * } + * ], + * "headersTruncated": false, + * "messageId": "o3vrnil0e2ic28tr" + * }, + * "receipt": { + * "recipients": [ + * "johndoe@example.com" + * ], + * "timestamp": "1970-01-01T00:00:00.000Z", + * "spamVerdict": { + * "status": "PASS" + * }, + * "dkimVerdict": { + * "status": "PASS" + * }, + * "dmarcPolicy": "reject", + * "processingTimeMillis": 574, + * "action": { + * "type": "Lambda", + * "invocationType": "Event", + * "functionArn": "arn:aws:lambda:us-west-2:012345678912:function:Example" + * }, + * "dmarcVerdict": { + * "status": "PASS" + * }, + * "spfVerdict": { + * "status": "PASS" + * }, + * "virusVerdict": { + * "status": "PASS" + * } + * } + * }, + * "eventSource": "aws:ses" + * } + * ] + * } + * ``` + * + * @see {@link types.SesEvent | SesEvent} + * @see {@link https://docs.aws.amazon.com/ses/latest/dg/receiving-email-notifications-examples.html} + */ const SesSchema = z.object({ Records: z.array(SesRecordSchema), }); -export { SesSchema, SesRecordSchema }; +export { SesSchema }; diff --git a/packages/parser/src/schemas/sns.ts b/packages/parser/src/schemas/sns.ts index 862306a66b..1e90a4b265 100644 --- a/packages/parser/src/schemas/sns.ts +++ b/packages/parser/src/schemas/sns.ts @@ -21,6 +21,35 @@ const SnsNotificationSchema = z.object({ Timestamp: z.string().datetime(), }); +/** + * Zod schema for SQS -> SNS event + * + * @example + * ```json + * { + * "Records": [ + * { + * "messageId": "79406a00-bf15-46ca-978c-22c3613fcb30", + * "receiptHandle": "AQEB3fkqlBqq239bMCAHIr5mZkxJYKtxsTTy1lMImmpY7zqpQdfcAE8zFiuRh7X5ciROy24taT2rRXfuJFN/yEUVcQ6d5CIOCEK4htmRJJOHIyGdZPAm2NUUG5nNn2aEzgfzVvrkPBsrCbr7XTzK5s6eUZNH/Nn9AJtHKHpzweRK34Bon9OU/mvyIT7EJbwHPsdhL14NrCp8pLWBiIhkaJkG2G6gPO89dwHtGVUARJL+zP70AuIu/f7QgmPtY2eeE4AVbcUT1qaIlSGHUXxoHq/VMHLd/c4zWl0EXQOo/90DbyCUMejTIKL7N15YfkHoQDHprvMiAr9S75cdMiNOduiHzZLg/qVcv4kxsksKLFMKjwlzmYuQYy2KslVGwoHMd4PD", + * "body": "{\n \"Type\" : \"Notification\",\n \"MessageId\" : \"d88d4479-6ec0-54fe-b63f-1cf9df4bb16e\",\n \"TopicArn\" : \"arn:aws:sns:eu-west-1:231436140809:powertools265\",\n \"Message\" : \"{\\\"message\\\": \\\"hello world\\\", \\\"username\\\": \\\"lessa\\\"}\",\n \"Timestamp\" : \"2021-01-19T10:07:07.287Z\",\n \"SignatureVersion\" : \"1\",\n \"Signature\" : \"tEo2i6Lw6/Dr7Jdlulh0sXgnkF0idd3hqs8QZCorQpzkIWVOuu583NT0Gv0epuZD1Bo+tex6NgP5p6415yNVujGHJKnkrA9ztzXaVgFiol8rf8AFGQbmb7RsM9BqATQUJeg9nCTe0jksmWXmjxEFr8XKyyRuQBwSlRTngAvOw8jUnCe1vyYD5xPec1xpfOEGLi5BqSog+6tBtsry3oAtcENX8SV1tVuMpp6D+UrrU8xNT/5D70uRDppkPE3vq+t7rR0fVSdQRdUV9KmQD2bflA1Dyb2y37EzwJOMHDDQ82aOhj/JmPxvEAlV8RkZl6J0HIveraRy9wbNLbI7jpiOCw==\",\n \"SigningCertURL\" : \"https://sns.eu-west-1.amazonaws.com/SimpleNotificationService-010a507c1833636cd94bdb98bd93083a.pem\",\n \"UnsubscribeURL\" : \"https://sns.eu-west-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:eu-west-1:231436140809:powertools265:15189ad7-870e-40e5-a7dd-a48898cd9f86\"\n}", + * "attributes": { + * "ApproximateReceiveCount": "1", + * "SentTimestamp": "1611050827340", + * "SenderId": "AIDAISMY7JYY5F7RTT6AO", + * "ApproximateFirstReceiveTimestamp": "1611050827344" + * }, + * "messageAttributes": {}, + * "md5OfBody": "8910bdaaf9a30a607f7891037d4af0b0", + * "eventSource": "aws:sqs", + * "eventSourceARN": "arn:aws:sqs:eu-west-1:231436140809:powertools265", + * "awsRegion": "eu-west-1" + * } + * ] + * } + * ``` + * + * @see {@link types.SnsSqsNotification | SnsSqsNotification} + */ const SnsSqsNotificationSchema = SnsNotificationSchema.extend({ UnsubscribeURL: z.string().optional(), SigningCertURL: z.string().url().optional(), @@ -36,14 +65,49 @@ const SnsRecordSchema = z.object({ Sns: SnsNotificationSchema, }); +/** + * Zod schema for SNS event + * + * @example + * ```json + * { + * "Records": [ + * { + * "EventVersion": "1.0", + * "EventSubscriptionArn": "arn:aws:sns:us-east-2:123456789012:sns-la ...", + * "EventSource": "aws:sns", + * "Sns": { + * "SignatureVersion": "1", + * "Timestamp": "2019-01-02T12:45:07.000Z", + * "Signature": "tcc6faL2yUC6dgZdmrwh1Y4cGa/ebXEkAi6RibDsvpi+tE/1+82j...65r==", + * "SigningCertUrl": "https://sns.us-east-2.amazonaws.com/SimpleNotification", + * "MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e", + * "Message": "Hello from SNS!", + * "MessageAttributes": { + * "Test": { + * "Type": "String", + * "Value": "TestString" + * }, + * "TestBinary": { + * "Type": "Binary", + * "Value": "TestBinary" + * } + * }, + * "Type": "Notification", + * "UnsubscribeUrl": "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe", + * "TopicArn": "arn:aws:sns:us-east-2:123456789012:sns-lambda", + * "Subject": "TestInvoke" + * } + * } + * ] + * } + * ``` + * + * @see {@link types.SnsEvent | SnsEvent} + * @see {@link https://docs.aws.amazon.com/lambda/latest/dg/with-sns.html#sns-sample-event} + */ const SnsSchema = z.object({ Records: z.array(SnsRecordSchema), }); -export { - SnsSchema, - SnsRecordSchema, - SnsNotificationSchema, - SnsMsgAttribute, - SnsSqsNotificationSchema, -}; +export { SnsSchema, SnsSqsNotificationSchema }; diff --git a/packages/parser/src/schemas/sqs.ts b/packages/parser/src/schemas/sqs.ts index 5484246e0d..c861a94dd3 100644 --- a/packages/parser/src/schemas/sqs.ts +++ b/packages/parser/src/schemas/sqs.ts @@ -36,13 +36,61 @@ const SqsRecordSchema = z.object({ awsRegion: z.string(), }); +/** + * Zod schema for SQS event + * + * @example + * ```json + * { + * "Records": [ + * { + * "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", + * "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", + * "body": "Test message.", + * "attributes": { + * "ApproximateReceiveCount": "1", + * "SentTimestamp": "1545082649183", + * "SenderId": "AIDAIENQZJOLO23YVJ4VO", + * "ApproximateFirstReceiveTimestamp": "1545082649185" + * }, + * "messageAttributes": { + * "testAttr": { + * "stringValue": "100", + * "binaryValue": "base64Str", + * "dataType": "Number" + * } + * }, + * "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", + * "eventSource": "aws:sqs", + * "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue", + * "awsRegion": "us-east-2" + * }, + * { + * "messageId": "2e1424d4-f796-459a-8184-9c92662be6da", + * "receiptHandle": "AQEBzWwaftRI0KuVm4tP+/7q1rGgNqicHq...", + * "body": "{\"message\": \"foo1\"}", + * "attributes": { + * "ApproximateReceiveCount": "1", + * "SentTimestamp": "1545082650636", + * "SenderId": "AIDAIENQZJOLO23YVJ4VO", + * "ApproximateFirstReceiveTimestamp": "1545082650649", + * "DeadLetterQueueSourceArn": "arn:aws:sqs:us-east-2:123456789012:my-queue-dead" + * }, + * "messageAttributes": {}, + * "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", + * "eventSource": "aws:sqs", + * "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue", + * "awsRegion": "us-east-2" + * } + * ] + * } + * ``` + * + * @see {@link types.SqsEvent | SqsEvent} + * @see {@link https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#example-standard-queue-message-event} + */ const SqsSchema = z.object({ Records: z.array(SqsRecordSchema), }); -export { - SqsSchema, - SqsRecordSchema, - SqsAttributesSchema, - SqsMsgAttributeSchema, -}; +export { SqsSchema, SqsRecordSchema }; diff --git a/packages/parser/src/schemas/vpc-lattice.ts b/packages/parser/src/schemas/vpc-lattice.ts index f8f266fa20..569caf2c93 100644 --- a/packages/parser/src/schemas/vpc-lattice.ts +++ b/packages/parser/src/schemas/vpc-lattice.ts @@ -1,5 +1,30 @@ import { z } from 'zod'; +/** + * Zod schema for VPC Lattice event + * + * @example + * ```json + * { + "raw_path": "/testpath", + * "method": "GET", + * "headers": { + * "user_agent": "curl/7.64.1", + * "x-forwarded-for": "10.213.229.10", + * "host": "test-lambda-service-3908sdf9u3u.dkfjd93.vpc-lattice-svcs.us-east-2.on.aws", + * "accept": "*\/*", + * }, + * "query_string_parameters": { + * "order-id": "1" + * }, + * "body": "eyJ0ZXN0IjogImV2ZW50In0=", + * "is_base64_encoded": true + *} + * ``` + * + * @see {@link types.VpcLatticeEvent | VpcLatticeEvent} + * @see {@link https://docs.aws.amazon.com/vpc-lattice/latest/ug/lambda-functions.html#receive-event-from-service} + */ const VpcLatticeSchema = z.object({ method: z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']), raw_path: z.string(), diff --git a/packages/parser/src/schemas/vpc-latticev2.ts b/packages/parser/src/schemas/vpc-latticev2.ts index 1ef3fd671f..ef80f0a8e3 100644 --- a/packages/parser/src/schemas/vpc-latticev2.ts +++ b/packages/parser/src/schemas/vpc-latticev2.ts @@ -22,6 +22,45 @@ const VpcLatticeV2RequestContext = z.object({ identity: VpcLatticeV2RequestContextIdentity, }); +/** + * Zod schema for VpcLatticeV2 event + * + * @example + * ```json + * { + * "version": "2.0", + * "path": "/newpath", + * "method": "GET", + * "headers": { + * "user_agent": "curl/7.64.1", + * "x-forwarded-for": "10.213.229.10", + * "host": "test-lambda-service-3908sdf9u3u.dkfjd93.vpc-lattice-svcs.us-east-2.on.aws", + * "accept": "*]/*" + * }, + * "queryStringParameters": { + * "order-id": "1" + * }, + * "body": "{\"message\": \"Hello from Lambda!\"}", + * "isBase64Encoded": false, + * "requestContext": { + * "serviceNetworkArn": "arn:aws:vpc-lattice:us-east-2:123456789012:servicenetwork/sn-0bf3f2882e9cc805a", + * "serviceArn": "arn:aws:vpc-lattice:us-east-2:123456789012:service/svc-0a40eebed65f8d69c", + * "targetGroupArn": "arn:aws:vpc-lattice:us-east-2:123456789012:targetgroup/tg-6d0ecf831eec9f09", + * "identity": { + * "sourceVpcArn": "arn:aws:ec2:region:123456789012:vpc/vpc-0b8276c84697e7339", + * "type": "AWS_IAM", + * "principal": "arn:aws:sts::123456789012:assumed-role/example-role/057d00f8b51257ba3c853a0f248943cf", + * "sessionName": "057d00f8b51257ba3c853a0f248943cf", + * "x509SanDns": "example.com" + * }, + * "region": "us-east-2", + * "timeEpoch": "1696331543569073" + * } + * } + * ``` + * @see {@link types.VpcLatticeEventV2 | VpcLatticeEventV2} + * @see {@link https://docs.aws.amazon.com/vpc-lattice/latest/ug/lambda-functions.html#receive-event-from-service} + */ const VpcLatticeV2Schema = z.object({ version: z.string(), path: z.string(), diff --git a/packages/parser/src/types/index.ts b/packages/parser/src/types/index.ts index 26052e60b6..33c9fadcd0 100644 --- a/packages/parser/src/types/index.ts +++ b/packages/parser/src/types/index.ts @@ -25,12 +25,11 @@ export type { KafkaSelfManagedEvent, KafkaMskEvent, KinesisDataStreamEvent, - KinesisDataStreamRecord, - KinesisDataStreamRecordPayload, KinesisFireHoseEvent, KinesisFireHoseSqsEvent, LambdaFunctionUrlEvent, SesEvent, + S3ObjectLambdaEvent, VpcLatticeEvent, VpcLatticeEventV2, } from './schema.js'; diff --git a/packages/parser/src/types/parser.ts b/packages/parser/src/types/parser.ts index c775a78d94..c3c6af7877 100644 --- a/packages/parser/src/types/parser.ts +++ b/packages/parser/src/types/parser.ts @@ -1,23 +1,35 @@ import type { ZodSchema, ZodError } from 'zod'; import type { Envelope } from './envelope.js'; +/** + * Options for the parser used in middy middleware and decorator + */ type ParserOptions = { schema: S; envelope?: Envelope; safeParse?: boolean; }; +/** + * A successful parsing result with the parsed data when using safeParse + */ type ParsedResultSuccess = { success: true; data: Output; }; +/** + * A failed parsing result with the error when using safeParse, contains the original event and the error. + */ type ParsedResultError = { success: false; error: ZodError | Error; originalEvent: Input; }; +/** + * The result of parsing an event using the safeParse, can either be a success or an error + */ type ParsedResult = | ParsedResultSuccess | ParsedResultError; diff --git a/packages/parser/src/types/schema.ts b/packages/parser/src/types/schema.ts index 6b18b57968..91574fe37b 100644 --- a/packages/parser/src/types/schema.ts +++ b/packages/parser/src/types/schema.ts @@ -1,45 +1,38 @@ -import { - KafkaSelfManagedEventSchema, - KafkaMskEventSchema, -} from '../schemas/kafka.js'; import { z } from 'zod'; import { - KinesisDataStreamRecord, - KinesisDataStreamRecordPayload, - KinesisDataStreamSchema, -} from '../schemas/kinesis.js'; -import { APIGatewayProxyEventSchema } from '../schemas/apigw.js'; -import { AlbSchema, AlbMultiValueHeadersSchema } from '../schemas/alb.js'; -import { APIGatewayProxyEventV2Schema } from '../schemas/apigwv2.js'; -import { DynamoDBStreamSchema } from '../schemas/dynamodb.js'; -import { SqsSchema } from '../schemas/sqs.js'; -import { + AlbSchema, + AlbMultiValueHeadersSchema, + APIGatewayProxyEventSchema, + APIGatewayProxyEventV2Schema, CloudFormationCustomResourceCreateSchema, CloudFormationCustomResourceDeleteSchema, CloudFormationCustomResourceUpdateSchema, -} from '../schemas/cloudformation-custom-resource.js'; -import { CloudWatchLogsSchema } from '../schemas/cloudwatch.js'; -import { EventBridgeSchema } from '../schemas/eventbridge.js'; -import { + CloudWatchLogsSchema, + DynamoDBStreamSchema, + EventBridgeSchema, + KafkaSelfManagedEventSchema, + KafkaMskEventSchema, + KinesisDataStreamSchema, KinesisFirehoseSchema, KinesisFirehoseSqsSchema, -} from '../schemas/kinesis-firehose.js'; -import { LambdaFunctionUrlSchema } from '../schemas/lambda.js'; -import { - S3EventNotificationEventBridgeSchema, + LambdaFunctionUrlSchema, S3Schema, + S3EventNotificationEventBridgeSchema, S3SqsEventNotificationSchema, -} from '../schemas/s3.js'; -import { SesSchema } from '../schemas/ses.js'; -import { SnsSchema } from '../schemas/sns.js'; -import { VpcLatticeSchema } from '../schemas/vpc-lattice.js'; -import { VpcLatticeV2Schema } from '../schemas/vpc-latticev2.js'; + SesSchema, + SnsSchema, + SqsSchema, + VpcLatticeSchema, + VpcLatticeV2Schema, + S3ObjectLambdaEventSchema, +} from '../schemas/index.js'; type ALBEvent = z.infer; type ALBMultiValueHeadersEvent = z.infer; type APIGatewayProxyEvent = z.infer; + type APIGatewayProxyEventV2 = z.infer; type CloudFormationCustomResourceCreateEvent = z.infer< @@ -80,6 +73,8 @@ type S3EventNotificationEventBridge = z.infer< type S3SqsEventNotification = z.infer; +type S3ObjectLambdaEvent = z.infer; + type SesEvent = z.infer; type SnsEvent = z.infer; @@ -104,14 +99,13 @@ export type { KafkaSelfManagedEvent, KafkaMskEvent, KinesisDataStreamEvent, - KinesisDataStreamRecord, - KinesisDataStreamRecordPayload, KinesisFireHoseEvent, KinesisFireHoseSqsEvent, LambdaFunctionUrlEvent, S3Event, S3EventNotificationEventBridge, S3SqsEventNotification, + S3ObjectLambdaEvent, SesEvent, SnsEvent, SqsEvent, diff --git a/packages/parser/tests/events/apigw-http/authorizer-request.json b/packages/parser/tests/events/apigw-http/authorizer-request.json new file mode 100644 index 0000000000..28529efbbb --- /dev/null +++ b/packages/parser/tests/events/apigw-http/authorizer-request.json @@ -0,0 +1,41 @@ +{ + "version": "2.0", + "type": "REQUEST", + "routeArn": "arn:aws:execute-api:eu-west-1:123456789012:lsw1ro4ipb/$default/POST/lambda", + "identitySource": [ + "Bearer foo" + ], + "routeKey": "POST /lambda", + "rawPath": "/lambda", + "rawQueryString": "", + "headers": { + "accept": "*/*", + "accept-encoding": "gzip, deflate", + "authorization": "Bearer foo", + "content-length": "0", + "host": "lsw1ro4ipb.execute-api.eu-west-1.amazonaws.com", + "user-agent": "HTTPie/3.2.2", + "x-amzn-trace-id": "Root=1-66705bc7-2b4257df30cbee696ef2cf28", + "x-forwarded-for": "15.248.3.126", + "x-forwarded-port": "443", + "x-forwarded-proto": "https" + }, + "requestContext": { + "accountId": "123456789012", + "apiId": "lsw1ro4ipb", + "domainName": "lsw1ro4ipb.execute-api.eu-west-1.amazonaws.com", + "domainPrefix": "lsw1ro4ipb", + "http": { + "method": "POST", + "path": "/lambda", + "protocol": "HTTP/1.1", + "sourceIp": "15.248.3.126", + "userAgent": "HTTPie/3.2.2" + }, + "requestId": "ZhNHJhhLjoEEPiw=", + "routeKey": "POST /lambda", + "stage": "$default", + "time": "17/Jun/2024:15:52:39 +0000", + "timeEpoch": 1718639559080 + } +} \ No newline at end of file diff --git a/packages/parser/tests/events/apigw-http/iam-auth.json b/packages/parser/tests/events/apigw-http/iam-auth.json new file mode 100644 index 0000000000..b3b5276f26 --- /dev/null +++ b/packages/parser/tests/events/apigw-http/iam-auth.json @@ -0,0 +1,51 @@ +{ + "version": "2.0", + "routeKey": "POST /iam", + "rawPath": "/iam", + "rawQueryString": "", + "headers": { + "accept": "*/*", + "accept-encoding": "gzip, deflate", + "authorization": "AWS4-HMAC-SHA256 Credential=ABCAXZWZ5ZDPIFV7JHWH/20240617/eu-west-1/execute-api/aws4_request, SignedHeaders=host;x-amz-date;x-amz-security-token, Signature=2ec027cabfd1c83da3a0f7d53f5edfda4bb30469be552966303bdbe7fda5ad6d", + "content-length": "0", + "host": "lsw1ro4ipb.execute-api.eu-west-1.amazonaws.com", + "user-agent": "HTTPie/3.2.2", + "x-amz-content-sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "x-amz-date": "20240617T153941Z", + "x-amz-security-token": "IQoJb3JpZ2luX2Vj[...]==", + "x-amzn-trace-id": "Root=1-667058bd-3265707259baa0695cdc20c5", + "x-forwarded-for": "15.248.3.126", + "x-forwarded-port": "443", + "x-forwarded-proto": "https" + }, + "requestContext": { + "accountId": "123456789012", + "apiId": "lsw1ro4ipb", + "authorizer": { + "iam": { + "accessKey": "ABCAXZWZ5ZDPIFV7JHWH", + "accountId": "123456789012", + "callerId": "ABCAXZWZ5ZDPNIH6C6ODK:aamorosi", + "cognitoIdentity": null, + "principalOrgId": null, + "userArn": "arn:aws:sts::123456789012:assumed-role/Admin/aamorosi", + "userId": "ABCOAXZWZ5ZDPNIH6C6ODK:aamorosi" + } + }, + "domainName": "lsw1ro4ipb.execute-api.eu-west-1.amazonaws.com", + "domainPrefix": "lsw1ro4ipb", + "http": { + "method": "POST", + "path": "/iam", + "protocol": "HTTP/1.1", + "sourceIp": "15.248.3.126", + "userAgent": "HTTPie/3.2.2" + }, + "requestId": "ZhLNpgotDoEEJUQ=", + "routeKey": "POST /iam", + "stage": "$default", + "time": "17/Jun/2024:15:39:41 +0000", + "timeEpoch": 1718638781472 + }, + "isBase64Encoded": false +} \ No newline at end of file diff --git a/packages/parser/tests/events/apigw-http/invalid.json b/packages/parser/tests/events/apigw-http/invalid.json new file mode 100644 index 0000000000..37a8fcecf9 --- /dev/null +++ b/packages/parser/tests/events/apigw-http/invalid.json @@ -0,0 +1,22 @@ +{ + "resource": "/", + "path": "/invalid", + "httpMethod": "GET", + "headers": {}, + "multiValueHeaders": {}, + "isBase64Encoded": false, + "body": "Foo!", + "requestContext": { + "accountId": "1234", + "apiId": "myApi", + "httpMethod": "GET", + "identity": { + "sourceIp": "127.0.0.1" + }, + "path": "/", + "protocol": "Https", + "requestId": "1234", + "requestTime": "2018-09-07T16: 20: 46Z", + "requestTimeEpoch": 1536992496000 + } +} \ No newline at end of file diff --git a/packages/parser/tests/events/apigw-http/jwt-authorizer-auth.json b/packages/parser/tests/events/apigw-http/jwt-authorizer-auth.json new file mode 100644 index 0000000000..73ba0c0f34 --- /dev/null +++ b/packages/parser/tests/events/apigw-http/jwt-authorizer-auth.json @@ -0,0 +1,55 @@ +{ + "version": "2.0", + "routeKey": "POST /cognito", + "rawPath": "/cognito", + "rawQueryString": "", + "headers": { + "accept": "*/*", + "accept-encoding": "gzip, deflate", + "authorization": "Bearer eyJra[...]A", + "content-length": "0", + "host": "lsw1ro4ipb.execute-api.eu-west-1.amazonaws.com", + "user-agent": "HTTPie/3.2.2", + "x-amzn-trace-id": "Root=1-66705b09-5f85233d2fb7bd54034f7e30", + "x-forwarded-for": "15.248.3.126", + "x-forwarded-port": "443", + "x-forwarded-proto": "https" + }, + "requestContext": { + "accountId": "123456789012", + "apiId": "lsw1ro4ipb", + "authorizer": { + "jwt": { + "claims": { + "aud": "3nkoep4151b7umeggnottc30u9", + "auth_time": "1718636404", + "cognito:username": "aamorosi", + "event_id": "c7f6cc62-c476-4c6a-ba5b-745244dfe5ee", + "exp": "1718722804", + "iat": "1718636404", + "iss": "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_y0bLG4i27", + "jti": "13727aba-89e6-4896-bd9e-8cbc0f478f9c", + "origin_jti": "37cc02cf-5c14-4636-beb3-4f8ca887935b", + "sub": "d2f50444-0041-7036-aea2-a955fca33d37", + "token_use": "id" + }, + "scopes": null + } + }, + "domainName": "lsw1ro4ipb.execute-api.eu-west-1.amazonaws.com", + "domainPrefix": "lsw1ro4ipb", + "http": { + "method": "POST", + "path": "/cognito", + "protocol": "HTTP/1.1", + "sourceIp": "15.248.3.126", + "userAgent": "HTTPie/3.2.2" + }, + "requestId": "ZhMpgigvDoEEPlg=", + "routeKey": "POST /cognito", + "stage": "$default", + "time": "17/Jun/2024:15:49:29 +0000", + "timeEpoch": 1718639369348 + }, + "isBase64Encoded": false +} \ No newline at end of file diff --git a/packages/parser/tests/events/apigw-http/lambda-authorizer-auth.json b/packages/parser/tests/events/apigw-http/lambda-authorizer-auth.json new file mode 100644 index 0000000000..0b6441284e --- /dev/null +++ b/packages/parser/tests/events/apigw-http/lambda-authorizer-auth.json @@ -0,0 +1,40 @@ +{ + "version": "2.0", + "routeKey": "POST /lambda", + "rawPath": "/lambda", + "rawQueryString": "", + "headers": { + "accept": "*/*", + "accept-encoding": "gzip, deflate", + "authorization": "Bearer foo", + "content-length": "0", + "host": "lsw1ro4ipb.execute-api.eu-west-1.amazonaws.com", + "user-agent": "HTTPie/3.2.2", + "x-amzn-trace-id": "Root=1-66705bc7-2b4257df30cbee696ef2cf28", + "x-forwarded-for": "15.248.3.126", + "x-forwarded-port": "443", + "x-forwarded-proto": "https" + }, + "requestContext": { + "accountId": "123456789012", + "apiId": "lsw1ro4ipb", + "authorizer": { + "lambda": null + }, + "domainName": "lsw1ro4ipb.execute-api.eu-west-1.amazonaws.com", + "domainPrefix": "lsw1ro4ipb", + "http": { + "method": "POST", + "path": "/lambda", + "protocol": "HTTP/1.1", + "sourceIp": "15.248.3.126", + "userAgent": "HTTPie/3.2.2" + }, + "requestId": "ZhNHJhhLjoEEPiw=", + "routeKey": "POST /lambda", + "stage": "$default", + "time": "17/Jun/2024:15:52:39 +0000", + "timeEpoch": 1718639559080 + }, + "isBase64Encoded": false +} \ No newline at end of file diff --git a/packages/parser/tests/events/apigw-http/no-auth.json b/packages/parser/tests/events/apigw-http/no-auth.json new file mode 100644 index 0000000000..0b6441284e --- /dev/null +++ b/packages/parser/tests/events/apigw-http/no-auth.json @@ -0,0 +1,40 @@ +{ + "version": "2.0", + "routeKey": "POST /lambda", + "rawPath": "/lambda", + "rawQueryString": "", + "headers": { + "accept": "*/*", + "accept-encoding": "gzip, deflate", + "authorization": "Bearer foo", + "content-length": "0", + "host": "lsw1ro4ipb.execute-api.eu-west-1.amazonaws.com", + "user-agent": "HTTPie/3.2.2", + "x-amzn-trace-id": "Root=1-66705bc7-2b4257df30cbee696ef2cf28", + "x-forwarded-for": "15.248.3.126", + "x-forwarded-port": "443", + "x-forwarded-proto": "https" + }, + "requestContext": { + "accountId": "123456789012", + "apiId": "lsw1ro4ipb", + "authorizer": { + "lambda": null + }, + "domainName": "lsw1ro4ipb.execute-api.eu-west-1.amazonaws.com", + "domainPrefix": "lsw1ro4ipb", + "http": { + "method": "POST", + "path": "/lambda", + "protocol": "HTTP/1.1", + "sourceIp": "15.248.3.126", + "userAgent": "HTTPie/3.2.2" + }, + "requestId": "ZhNHJhhLjoEEPiw=", + "routeKey": "POST /lambda", + "stage": "$default", + "time": "17/Jun/2024:15:52:39 +0000", + "timeEpoch": 1718639559080 + }, + "isBase64Encoded": false +} \ No newline at end of file diff --git a/packages/parser/tests/events/apigw-rest/authorizer-request.json b/packages/parser/tests/events/apigw-rest/authorizer-request.json new file mode 100644 index 0000000000..31d3d46966 --- /dev/null +++ b/packages/parser/tests/events/apigw-rest/authorizer-request.json @@ -0,0 +1,122 @@ +{ + "type": "REQUEST", + "methodArn": "arn:aws:execute-api:eu-west-1:123456789012:puhdx84jy9/prod/POST/lambda-request", + "resource": "/lambda-request", + "path": "/lambda-request", + "httpMethod": "POST", + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Authorization": "Bearer foo", + "CloudFront-Forwarded-Proto": "https", + "CloudFront-Is-Desktop-Viewer": "true", + "CloudFront-Is-Mobile-Viewer": "false", + "CloudFront-Is-SmartTV-Viewer": "false", + "CloudFront-Is-Tablet-Viewer": "false", + "CloudFront-Viewer-ASN": "7224", + "CloudFront-Viewer-Country": "GB", + "Content-Length": "0", + "Host": "puhdx84jy9.execute-api.eu-west-1.amazonaws.com", + "User-Agent": "HTTPie/3.2.2", + "Via": "1.1 e20527248be1eebaced63108ab7e73d6.cloudfront.net (CloudFront)", + "X-Amz-Cf-Id": "sIEfafSQxwenKloeWOp-4eyo_-grMyVNzwnkBmx5q7OcvBJV7knerQ==", + "X-Amzn-Trace-Id": "Root=1-66704feb-118151122b2ad2d3488844e7", + "X-Forwarded-For": "15.248.3.126, 130.176.209.37", + "X-Forwarded-Port": "443", + "X-Forwarded-Proto": "https" + }, + "multiValueHeaders": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Authorization": [ + "Bearer foo" + ], + "CloudFront-Forwarded-Proto": [ + "https" + ], + "CloudFront-Is-Desktop-Viewer": [ + "true" + ], + "CloudFront-Is-Mobile-Viewer": [ + "false" + ], + "CloudFront-Is-SmartTV-Viewer": [ + "false" + ], + "CloudFront-Is-Tablet-Viewer": [ + "false" + ], + "CloudFront-Viewer-ASN": [ + "7224" + ], + "CloudFront-Viewer-Country": [ + "GB" + ], + "Content-Length": [ + "0" + ], + "Host": [ + "puhdx84jy9.execute-api.eu-west-1.amazonaws.com" + ], + "User-Agent": [ + "HTTPie/3.2.2" + ], + "Via": [ + "1.1 e20527248be1eebaced63108ab7e73d6.cloudfront.net (CloudFront)" + ], + "X-Amz-Cf-Id": [ + "sIEfafSQxwenKloeWOp-4eyo_-grMyVNzwnkBmx5q7OcvBJV7knerQ==" + ], + "X-Amzn-Trace-Id": [ + "Root=1-66704feb-118151122b2ad2d3488844e7" + ], + "X-Forwarded-For": [ + "15.248.3.126, 130.176.209.37" + ], + "X-Forwarded-Port": [ + "443" + ], + "X-Forwarded-Proto": [ + "https" + ] + }, + "queryStringParameters": {}, + "multiValueQueryStringParameters": {}, + "pathParameters": {}, + "stageVariables": {}, + "requestContext": { + "resourceId": "w567jh", + "resourcePath": "/lambda-request", + "httpMethod": "POST", + "extendedRequestId": "ZhFsxGQDDoEEMig=", + "requestTime": "17/Jun/2024:15:02:03 +0000", + "path": "/prod/lambda-request", + "accountId": "123456789012", + "protocol": "HTTP/1.1", + "stage": "prod", + "domainPrefix": "puhdx84jy9", + "requestTimeEpoch": 1718636523035, + "requestId": "141d6671-99b4-40ca-9997-7a22f01eac74", + "identity": { + "cognitoIdentityPoolId": null, + "accountId": null, + "cognitoIdentityId": null, + "caller": null, + "sourceIp": "15.248.3.126", + "principalOrgId": null, + "accessKey": null, + "cognitoAuthenticationType": null, + "cognitoAuthenticationProvider": null, + "userArn": null, + "userAgent": "HTTPie/3.2.2", + "user": null + }, + "domainName": "puhdx84jy9.execute-api.eu-west-1.amazonaws.com", + "deploymentId": "v99qix", + "apiId": "puhdx84jy9" + } +} \ No newline at end of file diff --git a/packages/parser/tests/events/apigw-rest/authorizer-token.json b/packages/parser/tests/events/apigw-rest/authorizer-token.json new file mode 100644 index 0000000000..b4fa5a844d --- /dev/null +++ b/packages/parser/tests/events/apigw-rest/authorizer-token.json @@ -0,0 +1,5 @@ +{ + "type": "TOKEN", + "methodArn": "arn:aws:execute-api:eu-west-1:123456789012:puhdx84jy9/prod/POST/lambda-token", + "authorizationToken": "Bearer foo" +} \ No newline at end of file diff --git a/packages/parser/tests/events/apigw-rest/console-test-ui.json b/packages/parser/tests/events/apigw-rest/console-test-ui.json new file mode 100644 index 0000000000..10ab457088 --- /dev/null +++ b/packages/parser/tests/events/apigw-rest/console-test-ui.json @@ -0,0 +1,45 @@ +{ + "resource": "/no-auth", + "path": "/no-auth", + "httpMethod": "POST", + "headers": null, + "multiValueHeaders": null, + "queryStringParameters": null, + "multiValueQueryStringParameters": null, + "pathParameters": null, + "stageVariables": null, + "requestContext": { + "resourceId": "3nq1cq", + "resourcePath": "/no-auth", + "httpMethod": "POST", + "extendedRequestId": "ZhGnYGtqjoEFyzw=", + "requestTime": "17/Jun/2024:15:08:18 +0000", + "path": "/no-auth", + "accountId": "123456789012", + "protocol": "HTTP/1.1", + "stage": "test-invoke-stage", + "domainPrefix": "testPrefix", + "requestTimeEpoch": 1718636898112, + "requestId": "28422e1a-c975-42da-895e-165f882dafef", + "identity": { + "cognitoIdentityPoolId": null, + "cognitoIdentityId": null, + "apiKey": "test-invoke-api-key", + "principalOrgId": null, + "cognitoAuthenticationType": null, + "userArn": "arn:aws:sts::123456789012:assumed-role/Admin/aamorosi", + "apiKeyId": "test-invoke-api-key-id", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15", + "accountId": "123456789012", + "caller": "ABCAXZWZ5ZDPNIH6C6ODK:aamorosi", + "sourceIp": "test-invoke-source-ip", + "accessKey": "ABCAXZWZ5ZDPFDRIWYXX", + "cognitoAuthenticationProvider": null, + "user": "ABCAXZWZ5ZDPNIH6C6ODK:aamorosi" + }, + "domainName": "testPrefix.testDomainName", + "apiId": "puhdx84jy9" + }, + "body": null, + "isBase64Encoded": false +} \ No newline at end of file diff --git a/packages/parser/tests/events/apigw-rest/iam-auth.json b/packages/parser/tests/events/apigw-rest/iam-auth.json new file mode 100644 index 0000000000..180ed4e10a --- /dev/null +++ b/packages/parser/tests/events/apigw-rest/iam-auth.json @@ -0,0 +1,126 @@ +{ + "resource": "/iam", + "path": "/iam", + "httpMethod": "POST", + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "CloudFront-Forwarded-Proto": "https", + "CloudFront-Is-Desktop-Viewer": "true", + "CloudFront-Is-Mobile-Viewer": "false", + "CloudFront-Is-SmartTV-Viewer": "false", + "CloudFront-Is-Tablet-Viewer": "false", + "CloudFront-Viewer-ASN": "7224", + "CloudFront-Viewer-Country": "GB", + "Host": "puhdx84jy9.execute-api.eu-west-1.amazonaws.com", + "User-Agent": "HTTPie/3.2.2", + "Via": "1.1 d3e65123eab254da0d61a912409e06b4.cloudfront.net (CloudFront)", + "X-Amz-Cf-Id": "tP3wYavwGbIRVlinJVTXtHLSXkXwPi6WYz7EarjB1QnsqC0giphxmA==", + "x-amz-content-sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "x-amz-date": "20240617T145824Z", + "X-Amz-Security-Token": "IQoJb3JpZ[...]==", + "X-Amzn-Trace-Id": "Root=1-66704f11-56b0f1d611b392cb68ad2b83", + "X-Forwarded-For": "15.248.3.126, 130.176.209.38", + "X-Forwarded-Port": "443", + "X-Forwarded-Proto": "https" + }, + "multiValueHeaders": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "CloudFront-Forwarded-Proto": [ + "https" + ], + "CloudFront-Is-Desktop-Viewer": [ + "true" + ], + "CloudFront-Is-Mobile-Viewer": [ + "false" + ], + "CloudFront-Is-SmartTV-Viewer": [ + "false" + ], + "CloudFront-Is-Tablet-Viewer": [ + "false" + ], + "CloudFront-Viewer-ASN": [ + "7224" + ], + "CloudFront-Viewer-Country": [ + "GB" + ], + "Host": [ + "puhdx84jy9.execute-api.eu-west-1.amazonaws.com" + ], + "User-Agent": [ + "HTTPie/3.2.2" + ], + "Via": [ + "1.1 d3e65123eab254da0d61a912409e06b4.cloudfront.net (CloudFront)" + ], + "X-Amz-Cf-Id": [ + "tP3wYavwGbIRVlinJVTXtHLSXkXwPi6WYz7EarjB1QnsqC0giphxmA==" + ], + "x-amz-content-sha256": [ + "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + ], + "x-amz-date": [ + "20240617T145824Z" + ], + "X-Amz-Security-Token": [ + "IQoJb3JpZ[...]==" + ], + "X-Amzn-Trace-Id": [ + "Root=1-66704f11-56b0f1d611b392cb68ad2b83" + ], + "X-Forwarded-For": [ + "15.248.3.126, 130.176.209.38" + ], + "X-Forwarded-Port": [ + "443" + ], + "X-Forwarded-Proto": [ + "https" + ] + }, + "queryStringParameters": null, + "multiValueQueryStringParameters": null, + "pathParameters": null, + "stageVariables": null, + "requestContext": { + "resourceId": "f6ylys", + "resourcePath": "/iam", + "httpMethod": "POST", + "extendedRequestId": "ZhFKtGnnDoEEMig=", + "requestTime": "17/Jun/2024:14:58:25 +0000", + "path": "/prod/iam", + "accountId": "123456789012", + "protocol": "HTTP/1.1", + "stage": "prod", + "domainPrefix": "puhdx84jy9", + "requestTimeEpoch": 1718636305078, + "requestId": "89f9261a-2765-4d49-b72e-f76726991e44", + "identity": { + "cognitoIdentityPoolId": null, + "accountId": "123456789012", + "cognitoIdentityId": null, + "caller": "ABCAXZWZ5ZDPNIH6C6ODK:aamorosi", + "sourceIp": "15.248.3.126", + "principalOrgId": null, + "accessKey": "ABCAXZWZ5ZDPIFV7JHWH", + "cognitoAuthenticationType": null, + "cognitoAuthenticationProvider": null, + "userArn": "arn:aws:sts::123456789012:assumed-role/Admin/aamorosi", + "userAgent": "HTTPie/3.2.2", + "user": "ABCAXZWZ5ZDPNIH6C6ODK:aamorosi" + }, + "domainName": "puhdx84jy9.execute-api.eu-west-1.amazonaws.com", + "deploymentId": "v99qix", + "apiId": "puhdx84jy9" + }, + "body": null, + "isBase64Encoded": false +} \ No newline at end of file diff --git a/packages/parser/tests/events/apigw-rest/invalid.json b/packages/parser/tests/events/apigw-rest/invalid.json new file mode 100644 index 0000000000..9c2e70fe75 --- /dev/null +++ b/packages/parser/tests/events/apigw-rest/invalid.json @@ -0,0 +1,22 @@ +{ + "resource": "/", + "path": "/", + "httpMethod": "GET", + "headers": {}, + "multiValueHeaders": {}, + "isBase64Encoded": false, + "body": "Foo!", + "requestContext": { + "accountId": "1234", + "apiId": "myApi", + "httpMethod": "GET", + "identity": { + "sourceIp": "127.0.0.1" + }, + "path": "/", + "protocol": "Https", + "requestId": "1234", + "requestTime": "2018-09-07T16: 20: 46Z", + "requestTimeEpoch": 1536992496000 + } +} \ No newline at end of file diff --git a/packages/parser/tests/events/apigw-rest/jwt-authorizer-auth.json b/packages/parser/tests/events/apigw-rest/jwt-authorizer-auth.json new file mode 100644 index 0000000000..a4ec248d17 --- /dev/null +++ b/packages/parser/tests/events/apigw-rest/jwt-authorizer-auth.json @@ -0,0 +1,133 @@ +{ + "resource": "/cognito", + "path": "/cognito", + "httpMethod": "POST", + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Authorization": "Bearer eyJraWQiOiJadVlaXC9KdmtST2hpN1hBT3FIekx0TVwvdUpKXC9kWUtPMUs1QkVZSjVUM2xZPSIsImFsZyI6IlJTMjU2In0.eyJvcmlnaW5fanRpIjoiMzdjYzAyY2YtNWMxNC00NjM2LWJlYjMtNGY4Y2E4ODc5MzViIiwic3ViIjoiZDJmNTA0NDQtMDA0MS03MDM2LWFlYTItYTk1NWZjYTMzZDM3IiwiYXVkIjoiM25rb2VwNDE1MWI3dW1lZ2dub3R0YzMwdTkiLCJldmVudF9pZCI6ImM3ZjZjYzYyLWM0NzYtNGM2YS1iYTViLTc0NTI0NGRmZTVlZSIsInRva2VuX3VzZSI6ImlkIiwiYXV0aF90aW1lIjoxNzE4NjM2NDA0LCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb21cL2V1LXdlc3QtMV95MGJMRzRpMjciLCJjb2duaXRvOnVzZXJuYW1lIjoiYWFtb3Jvc2kiLCJleHAiOjE3MTg3MjI4MDQsImlhdCI6MTcxODYzNjQwNCwianRpIjoiMTM3MjdhYmEtODllNi00ODk2LWJkOWUtOGNiYzBmNDc4ZjljIn0.k9GKFY028MbL8hyLpsq2aCsMYt0P_im93qSyDF5awnhePlnfpNVXGXGGIcoBPyj-wlsZPdJAS_3Y324VhYlRzX76xTlew1lAtM665RAe4tncLl6MFlicTgHqsFXeOyXroSAe_X9wlP1jfMGiqW6oOkxrl_dajz7GJFFTEX8ztnTLD7FZvE5KophYihxq6RFZlOQFLWmx6w378ZQ49kHg-H5FF6JluI1G9sQ3P77rrhfL7MGv5xi1YiDeWa7T27PhHcgqll9fuLFA-_8LrdN-G5XMEt0Zlfb-WxF8YaStJ4e519GfnVWUuNWJo9BnFj0ChCiyhlK7cAWDjm1mz-Y4FA", + "CloudFront-Forwarded-Proto": "https", + "CloudFront-Is-Desktop-Viewer": "true", + "CloudFront-Is-Mobile-Viewer": "false", + "CloudFront-Is-SmartTV-Viewer": "false", + "CloudFront-Is-Tablet-Viewer": "false", + "CloudFront-Viewer-ASN": "7224", + "CloudFront-Viewer-Country": "GB", + "Host": "puhdx84jy9.execute-api.eu-west-1.amazonaws.com", + "User-Agent": "HTTPie/3.2.2", + "Via": "1.1 ff7cafeac35b91a7af23c56e3b9691e8.cloudfront.net (CloudFront)", + "X-Amz-Cf-Id": "zTKRjCprnRv8GXztLX3l3gQVmT0MLysk_-FcFmxxBfz0qSPCBQsGIg==", + "X-Amzn-Trace-Id": "Root=1-66704f8a-626bb89a0b2bf33b547f581c", + "X-Forwarded-For": "15.248.3.126, 130.176.209.4", + "X-Forwarded-Port": "443", + "X-Forwarded-Proto": "https" + }, + "multiValueHeaders": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Authorization": [ + "Bearer eyJraWQiOiJadVlaXC9KdmtST2hpN1hBT3FIekx0TVwvdUpKXC9kWUtPMUs1QkVZSjVUM2xZPSIsImFsZyI6IlJTMjU2In0.eyJvcmlnaW5fanRpIjoiMzdjYzAyY2YtNWMxNC00NjM2LWJlYjMtNGY4Y2E4ODc5MzViIiwic3ViIjoiZDJmNTA0NDQtMDA0MS03MDM2LWFlYTItYTk1NWZjYTMzZDM3IiwiYXVkIjoiM25rb2VwNDE1MWI3dW1lZ2dub3R0YzMwdTkiLCJldmVudF9pZCI6ImM3ZjZjYzYyLWM0NzYtNGM2YS1iYTViLTc0NTI0NGRmZTVlZSIsInRva2VuX3VzZSI6ImlkIiwiYXV0aF90aW1lIjoxNzE4NjM2NDA0LCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb21cL2V1LXdlc3QtMV95MGJMRzRpMjciLCJjb2duaXRvOnVzZXJuYW1lIjoiYWFtb3Jvc2kiLCJleHAiOjE3MTg3MjI4MDQsImlhdCI6MTcxODYzNjQwNCwianRpIjoiMTM3MjdhYmEtODllNi00ODk2LWJkOWUtOGNiYzBmNDc4ZjljIn0.k9GKFY028MbL8hyLpsq2aCsMYt0P_im93qSyDF5awnhePlnfpNVXGXGGIcoBPyj-wlsZPdJAS_3Y324VhYlRzX76xTlew1lAtM665RAe4tncLl6MFlicTgHqsFXeOyXroSAe_X9wlP1jfMGiqW6oOkxrl_dajz7GJFFTEX8ztnTLD7FZvE5KophYihxq6RFZlOQFLWmx6w378ZQ49kHg-H5FF6JluI1G9sQ3P77rrhfL7MGv5xi1YiDeWa7T27PhHcgqll9fuLFA-_8LrdN-G5XMEt0Zlfb-WxF8YaStJ4e519GfnVWUuNWJo9BnFj0ChCiyhlK7cAWDjm1mz-Y4FA" + ], + "CloudFront-Forwarded-Proto": [ + "https" + ], + "CloudFront-Is-Desktop-Viewer": [ + "true" + ], + "CloudFront-Is-Mobile-Viewer": [ + "false" + ], + "CloudFront-Is-SmartTV-Viewer": [ + "false" + ], + "CloudFront-Is-Tablet-Viewer": [ + "false" + ], + "CloudFront-Viewer-ASN": [ + "7224" + ], + "CloudFront-Viewer-Country": [ + "GB" + ], + "Host": [ + "puhdx84jy9.execute-api.eu-west-1.amazonaws.com" + ], + "User-Agent": [ + "HTTPie/3.2.2" + ], + "Via": [ + "1.1 ff7cafeac35b91a7af23c56e3b9691e8.cloudfront.net (CloudFront)" + ], + "X-Amz-Cf-Id": [ + "zTKRjCprnRv8GXztLX3l3gQVmT0MLysk_-FcFmxxBfz0qSPCBQsGIg==" + ], + "X-Amzn-Trace-Id": [ + "Root=1-66704f8a-626bb89a0b2bf33b547f581c" + ], + "X-Forwarded-For": [ + "15.248.3.126, 130.176.209.4" + ], + "X-Forwarded-Port": [ + "443" + ], + "X-Forwarded-Proto": [ + "https" + ] + }, + "queryStringParameters": null, + "multiValueQueryStringParameters": null, + "pathParameters": null, + "stageVariables": null, + "requestContext": { + "resourceId": "5x3n2k", + "authorizer": { + "claims": { + "origin_jti": "37cc02cf-5c14-4636-beb3-4f8ca887935b", + "sub": "d2f50444-0041-7036-aea2-a955fca33d37", + "aud": "3nkoep4151b7umeggnottc30u9", + "event_id": "c7f6cc62-c476-4c6a-ba5b-745244dfe5ee", + "token_use": "id", + "auth_time": "1718636404", + "iss": "https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_y0bLG4i27", + "cognito:username": "aamorosi", + "exp": "Tue Jun 18 15:00:04 UTC 2024", + "iat": "Mon Jun 17 15:00:04 UTC 2024", + "jti": "13727aba-89e6-4896-bd9e-8cbc0f478f9c" + } + }, + "resourcePath": "/cognito", + "httpMethod": "POST", + "extendedRequestId": "ZhFduHZrDoEEORQ=", + "requestTime": "17/Jun/2024:15:00:26 +0000", + "path": "/prod/cognito", + "accountId": "123456789012", + "protocol": "HTTP/1.1", + "stage": "prod", + "domainPrefix": "puhdx84jy9", + "requestTimeEpoch": 1718636426760, + "requestId": "e56434a3-0b5d-453c-9183-f07a5e91fbb3", + "identity": { + "cognitoIdentityPoolId": null, + "accountId": null, + "cognitoIdentityId": null, + "caller": null, + "sourceIp": "15.248.3.126", + "principalOrgId": null, + "accessKey": null, + "cognitoAuthenticationType": null, + "cognitoAuthenticationProvider": null, + "userArn": null, + "userAgent": "HTTPie/3.2.2", + "user": null + }, + "domainName": "puhdx84jy9.execute-api.eu-west-1.amazonaws.com", + "deploymentId": "v99qix", + "apiId": "puhdx84jy9" + }, + "body": null, + "isBase64Encoded": false +} \ No newline at end of file diff --git a/packages/parser/tests/events/apigw-rest/lambda-authorizer-auth.json b/packages/parser/tests/events/apigw-rest/lambda-authorizer-auth.json new file mode 100644 index 0000000000..51465ba840 --- /dev/null +++ b/packages/parser/tests/events/apigw-rest/lambda-authorizer-auth.json @@ -0,0 +1,122 @@ +{ + "resource": "/lambda-token", + "path": "/lambda-token", + "httpMethod": "POST", + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Authorization": "Bearer foo", + "CloudFront-Forwarded-Proto": "https", + "CloudFront-Is-Desktop-Viewer": "true", + "CloudFront-Is-Mobile-Viewer": "false", + "CloudFront-Is-SmartTV-Viewer": "false", + "CloudFront-Is-Tablet-Viewer": "false", + "CloudFront-Viewer-ASN": "7224", + "CloudFront-Viewer-Country": "GB", + "Host": "puhdx84jy9.execute-api.eu-west-1.amazonaws.com", + "User-Agent": "HTTPie/3.2.2", + "Via": "1.1 8313bbb5b34d1ea0742b64ffbb83b692.cloudfront.net (CloudFront)", + "X-Amz-Cf-Id": "lrbUQoVv2blphI3jBSXQNqA3oq4s8VCCimuaSxMrX4YbEZjVKWaLWg==", + "X-Amzn-Trace-Id": "Root=1-66704db9-6136092d02f4e3424fe2ce95", + "X-Forwarded-For": "15.248.3.126, 130.176.209.10", + "X-Forwarded-Port": "443", + "X-Forwarded-Proto": "https" + }, + "multiValueHeaders": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Authorization": [ + "Bearer foo" + ], + "CloudFront-Forwarded-Proto": [ + "https" + ], + "CloudFront-Is-Desktop-Viewer": [ + "true" + ], + "CloudFront-Is-Mobile-Viewer": [ + "false" + ], + "CloudFront-Is-SmartTV-Viewer": [ + "false" + ], + "CloudFront-Is-Tablet-Viewer": [ + "false" + ], + "CloudFront-Viewer-ASN": [ + "7224" + ], + "CloudFront-Viewer-Country": [ + "GB" + ], + "Host": [ + "puhdx84jy9.execute-api.eu-west-1.amazonaws.com" + ], + "User-Agent": [ + "HTTPie/3.2.2" + ], + "Via": [ + "1.1 8313bbb5b34d1ea0742b64ffbb83b692.cloudfront.net (CloudFront)" + ], + "X-Amz-Cf-Id": [ + "lrbUQoVv2blphI3jBSXQNqA3oq4s8VCCimuaSxMrX4YbEZjVKWaLWg==" + ], + "X-Amzn-Trace-Id": [ + "Root=1-66704db9-6136092d02f4e3424fe2ce95" + ], + "X-Forwarded-For": [ + "15.248.3.126, 130.176.209.10" + ], + "X-Forwarded-Port": [ + "443" + ], + "X-Forwarded-Proto": [ + "https" + ] + }, + "queryStringParameters": null, + "multiValueQueryStringParameters": null, + "pathParameters": null, + "stageVariables": null, + "requestContext": { + "resourceId": "nmnny7", + "authorizer": { + "principalId": "user", + "integrationLatency": 422 + }, + "resourcePath": "/lambda-token", + "httpMethod": "POST", + "extendedRequestId": "ZhEVGHTzDoEEB2A=", + "requestTime": "17/Jun/2024:14:52:41 +0000", + "path": "/prod/lambda-token", + "accountId": "123456789012", + "protocol": "HTTP/1.1", + "stage": "prod", + "domainPrefix": "puhdx84jy9", + "requestTimeEpoch": 1718635961959, + "requestId": "3c177581-2d03-4af4-9b68-5924083f37fe", + "identity": { + "cognitoIdentityPoolId": null, + "accountId": null, + "cognitoIdentityId": null, + "caller": null, + "sourceIp": "15.248.3.126", + "principalOrgId": null, + "accessKey": null, + "cognitoAuthenticationType": null, + "cognitoAuthenticationProvider": null, + "userArn": null, + "userAgent": "HTTPie/3.2.2", + "user": null + }, + "domainName": "puhdx84jy9.execute-api.eu-west-1.amazonaws.com", + "deploymentId": "v99qix", + "apiId": "puhdx84jy9" + }, + "body": null, + "isBase64Encoded": false +} \ No newline at end of file diff --git a/packages/parser/tests/events/apigw-rest/no-auth.json b/packages/parser/tests/events/apigw-rest/no-auth.json new file mode 100644 index 0000000000..5168cfbf2f --- /dev/null +++ b/packages/parser/tests/events/apigw-rest/no-auth.json @@ -0,0 +1,114 @@ +{ + "resource": "/no-auth", + "path": "/no-auth", + "httpMethod": "POST", + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "CloudFront-Forwarded-Proto": "https", + "CloudFront-Is-Desktop-Viewer": "true", + "CloudFront-Is-Mobile-Viewer": "false", + "CloudFront-Is-SmartTV-Viewer": "false", + "CloudFront-Is-Tablet-Viewer": "false", + "CloudFront-Viewer-ASN": "7224", + "CloudFront-Viewer-Country": "GB", + "Host": "puhdx84jy9.execute-api.eu-west-1.amazonaws.com", + "User-Agent": "HTTPie/3.2.2", + "Via": "1.1 49c0c4776e390b983c9f9f5365e3140c.cloudfront.net (CloudFront)", + "X-Amz-Cf-Id": "x9VncJ8IMo4X5UQEL8-Xg94vWwwuokofx236RgW1CrFCTh9DnPrgJA==", + "X-Amzn-Trace-Id": "Root=1-66704cad-0fbaf1491365339d168b2a7d", + "X-Forwarded-For": "15.248.3.126, 130.176.209.21", + "X-Forwarded-Port": "443", + "X-Forwarded-Proto": "https" + }, + "multiValueHeaders": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "CloudFront-Forwarded-Proto": [ + "https" + ], + "CloudFront-Is-Desktop-Viewer": [ + "true" + ], + "CloudFront-Is-Mobile-Viewer": [ + "false" + ], + "CloudFront-Is-SmartTV-Viewer": [ + "false" + ], + "CloudFront-Is-Tablet-Viewer": [ + "false" + ], + "CloudFront-Viewer-ASN": [ + "7224" + ], + "CloudFront-Viewer-Country": [ + "GB" + ], + "Host": [ + "puhdx84jy9.execute-api.eu-west-1.amazonaws.com" + ], + "User-Agent": [ + "HTTPie/3.2.2" + ], + "Via": [ + "1.1 49c0c4776e390b983c9f9f5365e3140c.cloudfront.net (CloudFront)" + ], + "X-Amz-Cf-Id": [ + "x9VncJ8IMo4X5UQEL8-Xg94vWwwuokofx236RgW1CrFCTh9DnPrgJA==" + ], + "X-Amzn-Trace-Id": [ + "Root=1-66704cad-0fbaf1491365339d168b2a7d" + ], + "X-Forwarded-For": [ + "15.248.3.126, 130.176.209.21" + ], + "X-Forwarded-Port": [ + "443" + ], + "X-Forwarded-Proto": [ + "https" + ] + }, + "queryStringParameters": null, + "multiValueQueryStringParameters": null, + "pathParameters": null, + "stageVariables": null, + "requestContext": { + "resourceId": "3nq1cq", + "resourcePath": "/no-auth", + "httpMethod": "POST", + "extendedRequestId": "ZhDrKF5dDoEEHfA=", + "requestTime": "17/Jun/2024:14:48:13 +0000", + "path": "/prod/no-auth", + "accountId": "123456789012", + "protocol": "HTTP/1.1", + "stage": "prod", + "domainPrefix": "puhdx84jy9", + "requestTimeEpoch": 1718635693506, + "requestId": "f88e38e3-2060-4a56-93c0-9efbc6a659a0", + "identity": { + "cognitoIdentityPoolId": null, + "accountId": null, + "cognitoIdentityId": null, + "caller": null, + "sourceIp": "15.248.3.126", + "principalOrgId": null, + "accessKey": null, + "cognitoAuthenticationType": null, + "cognitoAuthenticationProvider": null, + "userArn": null, + "userAgent": "HTTPie/3.2.2", + "user": null + }, + "domainName": "puhdx84jy9.execute-api.eu-west-1.amazonaws.com", + "deploymentId": "v99qix", + "apiId": "puhdx84jy9" + }, + "body": null, + "isBase64Encoded": false +} \ No newline at end of file diff --git a/packages/parser/tests/events/apigw-rest/websocket.json b/packages/parser/tests/events/apigw-rest/websocket.json new file mode 100644 index 0000000000..df32840f31 --- /dev/null +++ b/packages/parser/tests/events/apigw-rest/websocket.json @@ -0,0 +1,118 @@ +{ + "resource": "/websocket", + "path": "/websocket", + "httpMethod": "POST", + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "CloudFront-Forwarded-Proto": "https", + "CloudFront-Is-Desktop-Viewer": "true", + "CloudFront-Is-Mobile-Viewer": "false", + "CloudFront-Is-SmartTV-Viewer": "false", + "CloudFront-Is-Tablet-Viewer": "false", + "CloudFront-Viewer-ASN": "7224", + "CloudFront-Viewer-Country": "GB", + "Host": "puhdx84jy9.execute-api.eu-west-1.amazonaws.com", + "User-Agent": "HTTPie/3.2.2", + "Via": "1.1 49c0c4776e390b983c9f9f5365e3140c.cloudfront.net (CloudFront)", + "X-Amz-Cf-Id": "x9VncJ8IMo4X5UQEL8-Xg94vWwwuokofx236RgW1CrFCTh9DnPrgJA==", + "X-Amzn-Trace-Id": "Root=1-66704cad-0fbaf1491365339d168b2a7d", + "X-Forwarded-For": "15.248.3.126, 130.176.209.21", + "X-Forwarded-Port": "443", + "X-Forwarded-Proto": "https" + }, + "multiValueHeaders": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "CloudFront-Forwarded-Proto": [ + "https" + ], + "CloudFront-Is-Desktop-Viewer": [ + "true" + ], + "CloudFront-Is-Mobile-Viewer": [ + "false" + ], + "CloudFront-Is-SmartTV-Viewer": [ + "false" + ], + "CloudFront-Is-Tablet-Viewer": [ + "false" + ], + "CloudFront-Viewer-ASN": [ + "7224" + ], + "CloudFront-Viewer-Country": [ + "GB" + ], + "Host": [ + "puhdx84jy9.execute-api.eu-west-1.amazonaws.com" + ], + "User-Agent": [ + "HTTPie/3.2.2" + ], + "Via": [ + "1.1 49c0c4776e390b983c9f9f5365e3140c.cloudfront.net (CloudFront)" + ], + "X-Amz-Cf-Id": [ + "x9VncJ8IMo4X5UQEL8-Xg94vWwwuokofx236RgW1CrFCTh9DnPrgJA==" + ], + "X-Amzn-Trace-Id": [ + "Root=1-66704cad-0fbaf1491365339d168b2a7d" + ], + "X-Forwarded-For": [ + "15.248.3.126, 130.176.209.21" + ], + "X-Forwarded-Port": [ + "443" + ], + "X-Forwarded-Proto": [ + "https" + ] + }, + "queryStringParameters": null, + "multiValueQueryStringParameters": null, + "pathParameters": null, + "stageVariables": null, + "requestContext": { + "resourceId": "3nq1cq", + "resourcePath": "/no-auth", + "httpMethod": "POST", + "extendedRequestId": "ZhDrKF5dDoEEHfA=", + "requestTime": "17/Jun/2024:14:48:13 +0000", + "path": "/prod/no-auth", + "accountId": "123456789012", + "protocol": "HTTP/1.1", + "stage": "prod", + "domainPrefix": "puhdx84jy9", + "requestTimeEpoch": 1718635693506, + "requestId": "f88e38e3-2060-4a56-93c0-9efbc6a659a0", + "identity": { + "cognitoIdentityPoolId": null, + "accountId": null, + "cognitoIdentityId": null, + "caller": null, + "sourceIp": "15.248.3.126", + "principalOrgId": null, + "accessKey": null, + "cognitoAuthenticationType": null, + "cognitoAuthenticationProvider": null, + "userArn": null, + "userAgent": "HTTPie/3.2.2", + "user": null + }, + "domainName": "puhdx84jy9.execute-api.eu-west-1.amazonaws.com", + "deploymentId": "v99qix", + "apiId": "puhdx84jy9", + "connectionId": "GgCJcFJGoAMCJ8w=", + "routeKey": "$connect", + "eventType": "MESSAGE", + "messageId": "f88e38e3-2060-4a56-93c0-9efbc6a659a0" + }, + "body": null, + "isBase64Encoded": false +} \ No newline at end of file diff --git a/packages/parser/tests/events/kinesisFirehoseKinesisEvent.json b/packages/parser/tests/events/kinesisFirehoseKinesisEvent.json index 6cdd8e8a5b..bfc2f34a2f 100644 --- a/packages/parser/tests/events/kinesisFirehoseKinesisEvent.json +++ b/packages/parser/tests/events/kinesisFirehoseKinesisEvent.json @@ -1,32 +1,32 @@ { - "invocationId": "2b4d1ad9-2f48-94bd-a088-767c317e994a", - "sourceKinesisStreamArn":"arn:aws:kinesis:us-east-1:123456789012:stream/kinesis-source", - "deliveryStreamArn": "arn:aws:firehose:us-east-2:123456789012:deliverystream/delivery-stream-name", - "region": "us-east-2", - "records": [ - { - "data": "SGVsbG8gV29ybGQ=", - "recordId": "record1", - "approximateArrivalTimestamp": 1664028820148, - "kinesisRecordMetadata": { - "shardId": "shardId-000000000000", - "partitionKey": "4d1ad2b9-24f8-4b9d-a088-76e9947c317a", - "approximateArrivalTimestamp": 1664028820148, - "sequenceNumber": "49546986683135544286507457936321625675700192471156785154", - "subsequenceNumber": 0 - } - }, - { - "data": "eyJIZWxsbyI6ICJXb3JsZCJ9", - "recordId": "record2", - "approximateArrivalTimestamp": 1664028793294, - "kinesisRecordMetadata": { - "shardId": "shardId-000000000001", - "partitionKey": "4d1ad2b9-24f8-4b9d-a088-76e9947c318a", - "approximateArrivalTimestamp": 1664028793294, - "sequenceNumber": "49546986683135544286507457936321625675700192471156785155", - "subsequenceNumber": 0 - } - } - ] + "invocationId": "2b4d1ad9-2f48-94bd-a088-767c317e994a", + "sourceKinesisStreamArn": "arn:aws:kinesis:us-east-1:123456789012:stream/kinesis-source", + "deliveryStreamArn": "arn:aws:firehose:us-east-2:123456789012:deliverystream/delivery-stream-name", + "region": "us-east-2", + "records": [ + { + "data": "SGVsbG8gV29ybGQ=", + "recordId": "record1", + "approximateArrivalTimestamp": 1664028820148, + "kinesisRecordMetadata": { + "shardId": "shardId-000000000000", + "partitionKey": "4d1ad2b9-24f8-4b9d-a088-76e9947c317a", + "approximateArrivalTimestamp": 1664028820148, + "sequenceNumber": "49546986683135544286507457936321625675700192471156785154", + "subsequenceNumber": 0 + } + }, + { + "data": "eyJIZWxsbyI6ICJXb3JsZCJ9", + "recordId": "record2", + "approximateArrivalTimestamp": 1664028793294, + "kinesisRecordMetadata": { + "shardId": "shardId-000000000001", + "partitionKey": "4d1ad2b9-24f8-4b9d-a088-76e9947c318a", + "approximateArrivalTimestamp": 1664028793294, + "sequenceNumber": "49546986683135544286507457936321625675700192471156785155", + "subsequenceNumber": 0 + } + } + ] } diff --git a/packages/parser/tests/events/kinesisFirehoseSQSEvent.json b/packages/parser/tests/events/kinesisFirehoseSQSEvent.json index bea267c420..a9e36f554d 100644 --- a/packages/parser/tests/events/kinesisFirehoseSQSEvent.json +++ b/packages/parser/tests/events/kinesisFirehoseSQSEvent.json @@ -1,12 +1,12 @@ { - "invocationId": "556b67a3-48fc-4385-af49-e133aade9cb9", - "deliveryStreamArn": "arn:aws:firehose:us-east-1:123456789012:deliverystream/PUT-S3-tdyyE", - "region": "us-east-1", - "records": [ + "invocationId": "556b67a3-48fc-4385-af49-e133aade9cb9", + "deliveryStreamArn": "arn:aws:firehose:us-east-1:123456789012:deliverystream/PUT-S3-tdyyE", + "region": "us-east-1", + "records": [ { "recordId": "49640912821178817833517986466168945147170627572855734274000000", "approximateArrivalTimestamp": 1684864917398, "data": "eyJtZXNzYWdlSWQiOiI1YWI4MDdkNC01NjQ0LTRjNTUtOTdhMy00NzM5NjYzNWFjNzQiLCJyZWNlaXB0SGFuZGxlIjoiQVFFQndKbkt5ckhpZ1VNWmo2cllpZ0NneGxhUzNTTHkwYS4uLiIsImJvZHkiOiJUZXN0IG1lc3NhZ2UuIiwiYXR0cmlidXRlcyI6eyJBcHByb3hpbWF0ZVJlY2VpdmVDb3VudCI6IjEiLCJTZW50VGltZXN0YW1wIjoiMTY4NDg2NDg1MjQ5MSIsIlNlbmRlcklkIjoiQUlEQUlFTlFaSk9MTzIzWVZKNFZPIiwiQXBwcm94aW1hdGVGaXJzdFJlY2VpdmVUaW1lc3RhbXAiOiIxNjg0ODY0ODcyNDkxIn0sIm1lc3NhZ2VBdHRyaWJ1dGVzIjp7fSwibWQ1T2ZNZXNzYWdlQXR0cmlidXRlcyI6bnVsbCwibWQ1T2ZCb2R5IjoiYzhiNmJjNjBjOGI4YjNhOTA0ZTQ1YzFmYWJkZjUyM2QiLCJldmVudFNvdXJjZSI6ImF3czpzcXMiLCJldmVudFNvdXJjZUFSTiI6ImFybjphd3M6c3FzOnVzLWVhc3QtMToyMDA5ODQxMTIzODY6U05TIiwiYXdzUmVnaW9uIjoidXMtZWFzdC0xIn0K" } - ] + ] } diff --git a/packages/parser/tests/events/lambdaFunctionUrlEvent.json b/packages/parser/tests/events/lambdaFunctionUrlEvent.json index da5c133e6f..116286bdc8 100644 --- a/packages/parser/tests/events/lambdaFunctionUrlEvent.json +++ b/packages/parser/tests/events/lambdaFunctionUrlEvent.json @@ -1,47 +1,47 @@ { - "version":"2.0", - "routeKey":"$default", - "rawPath":"/", - "rawQueryString":"", - "headers":{ - "sec-fetch-mode":"navigate", - "x-amzn-tls-version":"TLSv1.2", - "sec-fetch-site":"cross-site", - "accept-language":"pt-BR,pt;q=0.9", - "x-forwarded-proto":"https", - "x-forwarded-port":"443", - "x-forwarded-for":"123.123.123.123", - "sec-fetch-user":"?1", - "accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", - "x-amzn-tls-cipher-suite":"ECDHE-RSA-AES128-GCM-SHA256", - "sec-ch-ua":"\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"102\", \"Google Chrome\";v=\"102\"", - "sec-ch-ua-mobile":"?0", - "x-amzn-trace-id":"Root=1-62ecd163-5f302e550dcde3b12402207d", - "sec-ch-ua-platform":"\"Linux\"", - "host":".lambda-url.us-east-1.on.aws", - "upgrade-insecure-requests":"1", - "cache-control":"max-age=0", - "accept-encoding":"gzip, deflate, br", - "sec-fetch-dest":"document", - "user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36" - }, - "requestContext":{ - "accountId":"anonymous", - "apiId":"", - "domainName":".lambda-url.us-east-1.on.aws", - "domainPrefix":"", - "http":{ - "method":"GET", - "path":"/", - "protocol":"HTTP/1.1", - "sourceIp":"123.123.123.123", - "userAgent":"agent" - }, - "requestId":"id", - "routeKey":"$default", - "stage":"$default", - "time":"05/Aug/2022:08:14:39 +0000", - "timeEpoch":1659687279885 - }, - "isBase64Encoded":false + "version": "2.0", + "routeKey": "$default", + "rawPath": "/", + "rawQueryString": "", + "headers": { + "sec-fetch-mode": "navigate", + "x-amzn-tls-version": "TLSv1.2", + "sec-fetch-site": "cross-site", + "accept-language": "pt-BR,pt;q=0.9", + "x-forwarded-proto": "https", + "x-forwarded-port": "443", + "x-forwarded-for": "123.123.123.123", + "sec-fetch-user": "?1", + "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", + "x-amzn-tls-cipher-suite": "ECDHE-RSA-AES128-GCM-SHA256", + "sec-ch-ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"102\", \"Google Chrome\";v=\"102\"", + "sec-ch-ua-mobile": "?0", + "x-amzn-trace-id": "Root=1-62ecd163-5f302e550dcde3b12402207d", + "sec-ch-ua-platform": "\"Linux\"", + "host": ".lambda-url.us-east-1.on.aws", + "upgrade-insecure-requests": "1", + "cache-control": "max-age=0", + "accept-encoding": "gzip, deflate, br", + "sec-fetch-dest": "document", + "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36" + }, + "requestContext": { + "accountId": "anonymous", + "apiId": "", + "domainName": ".lambda-url.us-east-1.on.aws", + "domainPrefix": "", + "http": { + "method": "GET", + "path": "/", + "protocol": "HTTP/1.1", + "sourceIp": "123.123.123.123", + "userAgent": "agent" + }, + "requestId": "id", + "routeKey": "$default", + "stage": "$default", + "time": "05/Aug/2022:08:14:39 +0000", + "timeEpoch": 1659687279885 + }, + "isBase64Encoded": false } diff --git a/packages/parser/tests/events/s3EventBridgeNotificationObjectCreatedEvent.json b/packages/parser/tests/events/s3EventBridgeNotificationObjectCreatedEvent.json index 5cc8f2f402..6096ea8d77 100644 --- a/packages/parser/tests/events/s3EventBridgeNotificationObjectCreatedEvent.json +++ b/packages/parser/tests/events/s3EventBridgeNotificationObjectCreatedEvent.json @@ -1,28 +1,28 @@ { + "version": "0", + "id": "f5f1e65c-dc3a-93ca-6c1e-b1647eac7963", + "detail-type": "Object Created", + "source": "aws.s3", + "account": "123456789012", + "time": "2023-03-08T17:50:14Z", + "region": "eu-west-1", + "resources": [ + "arn:aws:s3:::example-bucket" + ], + "detail": { "version": "0", - "id": "f5f1e65c-dc3a-93ca-6c1e-b1647eac7963", - "detail-type": "Object Created", - "source": "aws.s3", - "account": "123456789012", - "time": "2023-03-08T17:50:14Z", - "region": "eu-west-1", - "resources": [ - "arn:aws:s3:::example-bucket" - ], - "detail": { - "version": "0", - "bucket": { - "name": "example-bucket" - }, - "object": { - "key": "IMG_m7fzo3.jpg", - "size": 184662, - "etag": "4e68adba0abe2dc8653dc3354e14c01d", - "sequencer": "006408CAD69598B05E" - }, - "request-id": "57H08PA84AB1JZW0", - "requester": "123456789012", - "source-ip-address": "34.252.34.74", - "reason": "PutObject" - } + "bucket": { + "name": "example-bucket" + }, + "object": { + "key": "IMG_m7fzo3.jpg", + "size": 184662, + "etag": "4e68adba0abe2dc8653dc3354e14c01d", + "sequencer": "006408CAD69598B05E" + }, + "request-id": "57H08PA84AB1JZW0", + "requester": "123456789012", + "source-ip-address": "34.252.34.74", + "reason": "PutObject" + } } \ No newline at end of file diff --git a/packages/parser/tests/events/s3SqsEvent.json b/packages/parser/tests/events/s3SqsEvent.json index 55863af12b..418bd050b2 100644 --- a/packages/parser/tests/events/s3SqsEvent.json +++ b/packages/parser/tests/events/s3SqsEvent.json @@ -1,22 +1,21 @@ { - "Records":[ - { - "messageId":"ca3e7a89-c358-40e5-8aa0-5da01403c267", - "receiptHandle":"AQEBE7XoI7IQRLF7SrpiW9W4BanmOWe8UtVDbv6/CEZYKf/OktSNIb4j689tQfR4k44V/LY20lZ5VpxYt2GTYCsSLKTcBalTJaRX9CKu/hVqy/23sSNiKxnP56D+VLSn+hU275+AP1h4pUL0d9gLdRB2haX8xiM+LcGfis5Jl8BBXtoxKRF60O87O9/NvCmmXLeqkJuexfyEZNyed0fFCRXFXSjbmThG0OIQgcrGI8glBRGPA8htns58VtXFsSaPYNoqP3p5n6+ewKKVLD0lfm+0DlnLKRa+mjvFBaSer9KK1ff+Aq6zJ6HynPwADj+aF70Hwimc2zImYe51SLEF/E2csYlMNZYI/2qXW0m9R7wJ/XDTV4g2+h+BMTxsKnJQ6NQd", - "body":"{\"Records\":[{\"eventVersion\":\"2.1\",\"eventSource\":\"aws:s3\",\"awsRegion\":\"us-east-1\",\"eventTime\":\"2023-04-12T20:43:38.021Z\",\"eventName\":\"ObjectCreated:Put\",\"userIdentity\":{\"principalId\":\"A1YQ72UWCM96UF\"},\"requestParameters\":{\"sourceIPAddress\":\"93.108.161.96\"},\"responseElements\":{\"x-amz-request-id\":\"YMSSR8BZJ2Y99K6P\",\"x-amz-id-2\":\"6ASrUfj5xpn859fIq+6FXflOex/SKl/rjfiMd7wRzMg/zkHKR22PDpnh7KD3uq//cuOTbdX4DInN5eIs+cR0dY1z2Mc5NDP/\"},\"s3\":{\"s3SchemaVersion\":\"1.0\",\"configurationId\":\"SNS\",\"bucket\":{\"name\":\"xxx\",\"ownerIdentity\":{\"principalId\":\"A1YQ72UWCM96UF\"},\"arn\":\"arn:aws:s3:::xxx\"},\"object\":{\"key\":\"test.pdf\",\"size\":104681,\"eTag\":\"2e3ad1e983318bbd8e73b080e2997980\",\"versionId\":\"yd3d4HaWOT2zguDLvIQLU6ptDTwKBnQV\",\"sequencer\":\"00643717F9F8B85354\"}}}]}", - "attributes":{ - "ApproximateReceiveCount":"1", - "SentTimestamp":"1681332219270", - "SenderId":"AIDAJHIPRHEMV73VRJEBU", - "ApproximateFirstReceiveTimestamp":"1681332239270" - }, - "messageAttributes":{ - - }, - "md5OfBody":"16f4460f4477d8d693a5abe94fdbbd73", - "eventSource":"aws:sqs", - "eventSourceARN":"arn:aws:sqs:us-east-1:123456789012:SQS", - "awsRegion":"us-east-1" - } - ] - } + "Records": [ + { + "messageId": "ca3e7a89-c358-40e5-8aa0-5da01403c267", + "receiptHandle": "AQEBE7XoI7IQRLF7SrpiW9W4BanmOWe8UtVDbv6/CEZYKf/OktSNIb4j689tQfR4k44V/LY20lZ5VpxYt2GTYCsSLKTcBalTJaRX9CKu/hVqy/23sSNiKxnP56D+VLSn+hU275+AP1h4pUL0d9gLdRB2haX8xiM+LcGfis5Jl8BBXtoxKRF60O87O9/NvCmmXLeqkJuexfyEZNyed0fFCRXFXSjbmThG0OIQgcrGI8glBRGPA8htns58VtXFsSaPYNoqP3p5n6+ewKKVLD0lfm+0DlnLKRa+mjvFBaSer9KK1ff+Aq6zJ6HynPwADj+aF70Hwimc2zImYe51SLEF/E2csYlMNZYI/2qXW0m9R7wJ/XDTV4g2+h+BMTxsKnJQ6NQd", + "body": "{\"Records\":[{\"eventVersion\":\"2.1\",\"eventSource\":\"aws:s3\",\"awsRegion\":\"us-east-1\",\"eventTime\":\"2023-04-12T20:43:38.021Z\",\"eventName\":\"ObjectCreated:Put\",\"userIdentity\":{\"principalId\":\"A1YQ72UWCM96UF\"},\"requestParameters\":{\"sourceIPAddress\":\"93.108.161.96\"},\"responseElements\":{\"x-amz-request-id\":\"YMSSR8BZJ2Y99K6P\",\"x-amz-id-2\":\"6ASrUfj5xpn859fIq+6FXflOex/SKl/rjfiMd7wRzMg/zkHKR22PDpnh7KD3uq//cuOTbdX4DInN5eIs+cR0dY1z2Mc5NDP/\"},\"s3\":{\"s3SchemaVersion\":\"1.0\",\"configurationId\":\"SNS\",\"bucket\":{\"name\":\"xxx\",\"ownerIdentity\":{\"principalId\":\"A1YQ72UWCM96UF\"},\"arn\":\"arn:aws:s3:::xxx\"},\"object\":{\"key\":\"test.pdf\",\"size\":104681,\"eTag\":\"2e3ad1e983318bbd8e73b080e2997980\",\"versionId\":\"yd3d4HaWOT2zguDLvIQLU6ptDTwKBnQV\",\"sequencer\":\"00643717F9F8B85354\"}}}]}", + "attributes": { + "ApproximateReceiveCount": "1", + "SentTimestamp": "1681332219270", + "SenderId": "AIDAJHIPRHEMV73VRJEBU", + "ApproximateFirstReceiveTimestamp": "1681332239270" + }, + "messageAttributes": { + }, + "md5OfBody": "16f4460f4477d8d693a5abe94fdbbd73", + "eventSource": "aws:sqs", + "eventSourceARN": "arn:aws:sqs:us-east-1:123456789012:SQS", + "awsRegion": "us-east-1" + } + ] +} diff --git a/packages/parser/tests/events/snsSqsEvent.json b/packages/parser/tests/events/snsSqsEvent.json index ee440fc296..9e4ce4eb1e 100644 --- a/packages/parser/tests/events/snsSqsEvent.json +++ b/packages/parser/tests/events/snsSqsEvent.json @@ -1,20 +1,20 @@ { - "Records": [ - { - "messageId": "79406a00-bf15-46ca-978c-22c3613fcb30", - "receiptHandle": "AQEB3fkqlBqq239bMCAHIr5mZkxJYKtxsTTy1lMImmpY7zqpQdfcAE8zFiuRh7X5ciROy24taT2rRXfuJFN/yEUVcQ6d5CIOCEK4htmRJJOHIyGdZPAm2NUUG5nNn2aEzgfzVvrkPBsrCbr7XTzK5s6eUZNH/Nn9AJtHKHpzweRK34Bon9OU/mvyIT7EJbwHPsdhL14NrCp8pLWBiIhkaJkG2G6gPO89dwHtGVUARJL+zP70AuIu/f7QgmPtY2eeE4AVbcUT1qaIlSGHUXxoHq/VMHLd/c4zWl0EXQOo/90DbyCUMejTIKL7N15YfkHoQDHprvMiAr9S75cdMiNOduiHzZLg/qVcv4kxsksKLFMKjwlzmYuQYy2KslVGwoHMd4PD", - "body": "{\n \"Type\" : \"Notification\",\n \"MessageId\" : \"d88d4479-6ec0-54fe-b63f-1cf9df4bb16e\",\n \"TopicArn\" : \"arn:aws:sns:eu-west-1:231436140809:powertools265\",\n \"Message\" : \"{\\\"message\\\": \\\"hello world\\\", \\\"username\\\": \\\"lessa\\\"}\",\n \"Timestamp\" : \"2021-01-19T10:07:07.287Z\",\n \"SignatureVersion\" : \"1\",\n \"Signature\" : \"tEo2i6Lw6/Dr7Jdlulh0sXgnkF0idd3hqs8QZCorQpzkIWVOuu583NT0Gv0epuZD1Bo+tex6NgP5p6415yNVujGHJKnkrA9ztzXaVgFiol8rf8AFGQbmb7RsM9BqATQUJeg9nCTe0jksmWXmjxEFr8XKyyRuQBwSlRTngAvOw8jUnCe1vyYD5xPec1xpfOEGLi5BqSog+6tBtsry3oAtcENX8SV1tVuMpp6D+UrrU8xNT/5D70uRDppkPE3vq+t7rR0fVSdQRdUV9KmQD2bflA1Dyb2y37EzwJOMHDDQ82aOhj/JmPxvEAlV8RkZl6J0HIveraRy9wbNLbI7jpiOCw==\",\n \"SigningCertURL\" : \"https://sns.eu-west-1.amazonaws.com/SimpleNotificationService-010a507c1833636cd94bdb98bd93083a.pem\",\n \"UnsubscribeURL\" : \"https://sns.eu-west-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:eu-west-1:231436140809:powertools265:15189ad7-870e-40e5-a7dd-a48898cd9f86\"\n}", - "attributes": { - "ApproximateReceiveCount": "1", - "SentTimestamp": "1611050827340", - "SenderId": "AIDAISMY7JYY5F7RTT6AO", - "ApproximateFirstReceiveTimestamp": "1611050827344" - }, - "messageAttributes": {}, - "md5OfBody": "8910bdaaf9a30a607f7891037d4af0b0", - "eventSource": "aws:sqs", - "eventSourceARN": "arn:aws:sqs:eu-west-1:231436140809:powertools265", - "awsRegion": "eu-west-1" - } - ] + "Records": [ + { + "messageId": "79406a00-bf15-46ca-978c-22c3613fcb30", + "receiptHandle": "AQEB3fkqlBqq239bMCAHIr5mZkxJYKtxsTTy1lMImmpY7zqpQdfcAE8zFiuRh7X5ciROy24taT2rRXfuJFN/yEUVcQ6d5CIOCEK4htmRJJOHIyGdZPAm2NUUG5nNn2aEzgfzVvrkPBsrCbr7XTzK5s6eUZNH/Nn9AJtHKHpzweRK34Bon9OU/mvyIT7EJbwHPsdhL14NrCp8pLWBiIhkaJkG2G6gPO89dwHtGVUARJL+zP70AuIu/f7QgmPtY2eeE4AVbcUT1qaIlSGHUXxoHq/VMHLd/c4zWl0EXQOo/90DbyCUMejTIKL7N15YfkHoQDHprvMiAr9S75cdMiNOduiHzZLg/qVcv4kxsksKLFMKjwlzmYuQYy2KslVGwoHMd4PD", + "body": "{\n \"Type\" : \"Notification\",\n \"MessageId\" : \"d88d4479-6ec0-54fe-b63f-1cf9df4bb16e\",\n \"TopicArn\" : \"arn:aws:sns:eu-west-1:231436140809:powertools265\",\n \"Message\" : \"{\\\"message\\\": \\\"hello world\\\", \\\"username\\\": \\\"lessa\\\"}\",\n \"Timestamp\" : \"2021-01-19T10:07:07.287Z\",\n \"SignatureVersion\" : \"1\",\n \"Signature\" : \"tEo2i6Lw6/Dr7Jdlulh0sXgnkF0idd3hqs8QZCorQpzkIWVOuu583NT0Gv0epuZD1Bo+tex6NgP5p6415yNVujGHJKnkrA9ztzXaVgFiol8rf8AFGQbmb7RsM9BqATQUJeg9nCTe0jksmWXmjxEFr8XKyyRuQBwSlRTngAvOw8jUnCe1vyYD5xPec1xpfOEGLi5BqSog+6tBtsry3oAtcENX8SV1tVuMpp6D+UrrU8xNT/5D70uRDppkPE3vq+t7rR0fVSdQRdUV9KmQD2bflA1Dyb2y37EzwJOMHDDQ82aOhj/JmPxvEAlV8RkZl6J0HIveraRy9wbNLbI7jpiOCw==\",\n \"SigningCertURL\" : \"https://sns.eu-west-1.amazonaws.com/SimpleNotificationService-010a507c1833636cd94bdb98bd93083a.pem\",\n \"UnsubscribeURL\" : \"https://sns.eu-west-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:eu-west-1:231436140809:powertools265:15189ad7-870e-40e5-a7dd-a48898cd9f86\"\n}", + "attributes": { + "ApproximateReceiveCount": "1", + "SentTimestamp": "1611050827340", + "SenderId": "AIDAISMY7JYY5F7RTT6AO", + "ApproximateFirstReceiveTimestamp": "1611050827344" + }, + "messageAttributes": {}, + "md5OfBody": "8910bdaaf9a30a607f7891037d4af0b0", + "eventSource": "aws:sqs", + "eventSourceARN": "arn:aws:sqs:eu-west-1:231436140809:powertools265", + "awsRegion": "eu-west-1" + } + ] } diff --git a/packages/parser/tests/events/vpcLatticeV2Event.json b/packages/parser/tests/events/vpcLatticeV2Event.json index fe10d83a3a..a1bd86f67b 100644 --- a/packages/parser/tests/events/vpcLatticeV2Event.json +++ b/packages/parser/tests/events/vpcLatticeV2Event.json @@ -1,30 +1,30 @@ { - "version": "2.0", - "path": "/newpath", - "method": "GET", - "headers": { - "user_agent": "curl/7.64.1", - "x-forwarded-for": "10.213.229.10", - "host": "test-lambda-service-3908sdf9u3u.dkfjd93.vpc-lattice-svcs.us-east-2.on.aws", - "accept": "*/*" + "version": "2.0", + "path": "/newpath", + "method": "GET", + "headers": { + "user_agent": "curl/7.64.1", + "x-forwarded-for": "10.213.229.10", + "host": "test-lambda-service-3908sdf9u3u.dkfjd93.vpc-lattice-svcs.us-east-2.on.aws", + "accept": "*/*" + }, + "queryStringParameters": { + "order-id": "1" + }, + "body": "{\"message\": \"Hello from Lambda!\"}", + "isBase64Encoded": false, + "requestContext": { + "serviceNetworkArn": "arn:aws:vpc-lattice:us-east-2:123456789012:servicenetwork/sn-0bf3f2882e9cc805a", + "serviceArn": "arn:aws:vpc-lattice:us-east-2:123456789012:service/svc-0a40eebed65f8d69c", + "targetGroupArn": "arn:aws:vpc-lattice:us-east-2:123456789012:targetgroup/tg-6d0ecf831eec9f09", + "identity": { + "sourceVpcArn": "arn:aws:ec2:region:123456789012:vpc/vpc-0b8276c84697e7339", + "type": "AWS_IAM", + "principal": "arn:aws:sts::123456789012:assumed-role/example-role/057d00f8b51257ba3c853a0f248943cf", + "sessionName": "057d00f8b51257ba3c853a0f248943cf", + "x509SanDns": "example.com" }, - "queryStringParameters": { - "order-id": "1" - }, - "body": "{\"message\": \"Hello from Lambda!\"}", - "isBase64Encoded": false, - "requestContext": { - "serviceNetworkArn": "arn:aws:vpc-lattice:us-east-2:123456789012:servicenetwork/sn-0bf3f2882e9cc805a", - "serviceArn": "arn:aws:vpc-lattice:us-east-2:123456789012:service/svc-0a40eebed65f8d69c", - "targetGroupArn": "arn:aws:vpc-lattice:us-east-2:123456789012:targetgroup/tg-6d0ecf831eec9f09", - "identity": { - "sourceVpcArn": "arn:aws:ec2:region:123456789012:vpc/vpc-0b8276c84697e7339", - "type" : "AWS_IAM", - "principal": "arn:aws:sts::123456789012:assumed-role/example-role/057d00f8b51257ba3c853a0f248943cf", - "sessionName": "057d00f8b51257ba3c853a0f248943cf", - "x509SanDns": "example.com" - }, - "region": "us-east-2", - "timeEpoch": "1696331543569073" - } + "region": "us-east-2", + "timeEpoch": "1696331543569073" + } } diff --git a/packages/parser/tests/tsconfig.json b/packages/parser/tests/tsconfig.json index dc4ebdfc5f..5654b3e15f 100644 --- a/packages/parser/tests/tsconfig.json +++ b/packages/parser/tests/tsconfig.json @@ -6,6 +6,6 @@ }, "include": [ "../src/**/*", - "./**/*.*" + "./**/*", ] } \ No newline at end of file diff --git a/packages/parser/tests/unit/envelopes/apigw.test.ts b/packages/parser/tests/unit/envelopes/apigw.test.ts new file mode 100644 index 0000000000..e4c0a6cb78 --- /dev/null +++ b/packages/parser/tests/unit/envelopes/apigw.test.ts @@ -0,0 +1,119 @@ +/** + * Test built-in API Gateway REST envelope + * + * @group unit/parser/envelopes/apigw + */ +import { TestSchema, getTestEvent } from '../schema/utils.js'; +import { APIGatewayProxyEvent } from '../../../src/types/schema.js'; +import { ApiGatewayEnvelope } from '../../../src/envelopes/index.js'; +import { ParseError } from '../../../src/errors.js'; + +describe('API Gateway REST Envelope', () => { + const eventsPath = 'apigw-rest'; + const eventPrototype = getTestEvent({ + eventsPath, + filename: 'no-auth', + }); + + describe('Method: parse', () => { + it('should throw if the payload does not match the schema', () => { + // Prepare + const event = { ...eventPrototype }; + event.body = JSON.stringify({ name: 'foo' }); + + // Act & Assess + expect(() => ApiGatewayEnvelope.parse(event, TestSchema)).toThrow( + ParseError + ); + }); + + it('should throw if the body is null', () => { + // Prepare + const event = { ...eventPrototype }; + event.body = null; + + // Act & Assess + expect(() => ApiGatewayEnvelope.parse(event, TestSchema)).toThrow( + ParseError + ); + }); + + it('should parse and return the inner schema in an envelope', () => { + // Prepare + const event = { ...eventPrototype }; + const payload = { name: 'foo', age: 42 }; + event.body = JSON.stringify(payload); + + // Act + const parsedEvent = ApiGatewayEnvelope.parse(event, TestSchema); + + // Assess + expect(parsedEvent).toEqual(payload); + }); + }); + + describe('Method: safeParse', () => { + it('should not throw if the payload does not match the schema', () => { + // Prepare + const event = { ...eventPrototype }; + event.body = JSON.stringify({ name: 'foo' }); + + // Act + const parseResult = ApiGatewayEnvelope.safeParse(event, TestSchema); + + // Assess + expect(parseResult).toEqual({ + success: false, + error: expect.any(ParseError), + originalEvent: event, + }); + }); + + it('should not throw if the body is null', () => { + // Prepare + const event = { ...eventPrototype }; + event.body = null; + + // Act + const parseResult = ApiGatewayEnvelope.safeParse(event, TestSchema); + + // Assess + expect(parseResult).toEqual({ + success: false, + error: expect.any(ParseError), + originalEvent: event, + }); + }); + + it('should not throw if the event is invalid', () => { + // Prepare + const event = getTestEvent({ eventsPath, filename: 'invalid' }); + + // Act + const parseResult = ApiGatewayEnvelope.safeParse(event, TestSchema); + + // Assess + expect(parseResult).toEqual({ + success: false, + error: expect.any(ParseError), + originalEvent: event, + }); + }); + + it('should parse and return the inner schema in an envelope', () => { + // Prepare + const event = { ...eventPrototype }; + const payload = { name: 'foo', age: 42 }; + event.body = JSON.stringify(payload); + + // Act + const parsedEvent = ApiGatewayEnvelope.safeParse(event, TestSchema); + + // Assess + expect(parsedEvent).toEqual({ + success: true, + data: payload, + }); + }); + }); +}); diff --git a/packages/parser/tests/unit/envelopes/apigwt.test.ts b/packages/parser/tests/unit/envelopes/apigwt.test.ts deleted file mode 100644 index 1055e15f43..0000000000 --- a/packages/parser/tests/unit/envelopes/apigwt.test.ts +++ /dev/null @@ -1,92 +0,0 @@ -/** - * Test built in schema envelopes for api gateway - * - * @group unit/parser/envelopes - */ - -import { generateMock } from '@anatine/zod-mock'; -import { TestEvents, TestSchema } from '../schema/utils.js'; -import { APIGatewayProxyEvent } from '../../../src/types/'; -import { ApiGatewayEnvelope } from '../../../src/envelopes/index.js'; -import { ParseError } from '../../../src/errors.js'; - -describe('ApigwEnvelope ', () => { - describe('parse', () => { - it('should parse custom schema in envelope', () => { - const testCustomSchemaObject = generateMock(TestSchema); - const testEvent = TestEvents.apiGatewayProxyEvent as APIGatewayProxyEvent; - - testEvent.body = JSON.stringify(testCustomSchemaObject); - - const resp = ApiGatewayEnvelope.parse(testEvent, TestSchema); - expect(resp).toEqual(testCustomSchemaObject); - }); - - it('should throw no body provided', () => { - const testEvent = TestEvents.apiGatewayProxyEvent as APIGatewayProxyEvent; - testEvent.body = null; - - expect(() => ApiGatewayEnvelope.parse(testEvent, TestSchema)).toThrow( - ParseError - ); - }); - it('should throw invalid event provided', () => { - const testEvent = TestEvents.apiGatewayProxyEvent as APIGatewayProxyEvent; - testEvent.body = 'invalid'; - - expect(() => ApiGatewayEnvelope.parse(testEvent, TestSchema)).toThrow( - ParseError - ); - }); - }); - - describe('safeParse', () => { - it('should parse custom schema in envelope', () => { - const testCustomSchemaObject = generateMock(TestSchema); - const testEvent = TestEvents.apiGatewayProxyEvent as APIGatewayProxyEvent; - - testEvent.body = JSON.stringify(testCustomSchemaObject); - - const resp = ApiGatewayEnvelope.safeParse(testEvent, TestSchema); - expect(resp).toEqual({ - success: true, - data: testCustomSchemaObject, - }); - }); - - it('should return success false with original body if no body provided', () => { - const testEvent = TestEvents.apiGatewayProxyEvent as APIGatewayProxyEvent; - testEvent.body = null; - - const resp = ApiGatewayEnvelope.safeParse(testEvent, TestSchema); - expect(resp).toEqual({ - success: false, - error: expect.any(Error), - originalEvent: testEvent, - }); - }); - - it('should return success false with original body if invalid body provided', () => { - const testEvent = TestEvents.apiGatewayProxyEvent as APIGatewayProxyEvent; - testEvent.body = 'invalid'; - - const resp = ApiGatewayEnvelope.safeParse(testEvent, TestSchema); - expect(resp).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: testEvent, - }); - }); - it('should return success false if event is invalid', () => { - const resp = ApiGatewayEnvelope.safeParse( - 'invalid' as unknown, - TestSchema - ); - expect(resp).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: 'invalid', - }); - }); - }); -}); diff --git a/packages/parser/tests/unit/envelopes/apigwv2.test.ts b/packages/parser/tests/unit/envelopes/apigwv2.test.ts index dd5a82609b..d7bdefe92a 100644 --- a/packages/parser/tests/unit/envelopes/apigwv2.test.ts +++ b/packages/parser/tests/unit/envelopes/apigwv2.test.ts @@ -1,93 +1,118 @@ /** - * Test built in schema envelopes for api gateway v2 + * Test built-in API Gateway HTTP API (v2) envelope * - * @group unit/parser/envelopes + * @group unit/parser/envelopes/apigwv2 */ - -import { TestEvents, TestSchema } from '../schema/utils.js'; -import { generateMock } from '@anatine/zod-mock'; -import { APIGatewayProxyEventV2 } from 'aws-lambda'; +import { TestSchema, getTestEvent } from '../schema/utils.js'; +import { APIGatewayProxyEventV2 } from '../../../src/types/schema.js'; import { ApiGatewayV2Envelope } from '../../../src/envelopes/index.js'; +import { ParseError } from '../../../src/errors.js'; -describe('ApiGwV2Envelope ', () => { - describe('parse', () => { - it('should parse custom schema in envelope', () => { - const testEvent = - TestEvents.apiGatewayProxyV2Event as APIGatewayProxyEventV2; - const data = generateMock(TestSchema); +describe('API Gateway HTTP Envelope', () => { + const eventsPath = 'apigw-http'; + const eventPrototype = getTestEvent({ + eventsPath, + filename: 'no-auth', + }); - testEvent.body = JSON.stringify(data); + describe('Method: parse', () => { + it('should throw if the payload does not match the schema', () => { + // Prepare + const event = { ...eventPrototype }; + event.body = JSON.stringify({ name: 'foo' }); - expect(ApiGatewayV2Envelope.parse(testEvent, TestSchema)).toEqual(data); + // Act & Assess + expect(() => ApiGatewayV2Envelope.parse(event, TestSchema)).toThrow( + ParseError + ); }); - it('should throw when no body provided', () => { - const testEvent = - TestEvents.apiGatewayProxyV2Event as APIGatewayProxyEventV2; - testEvent.body = undefined; + it('should throw if the body is undefined', () => { + // Prepare + const event = { ...eventPrototype }; + event.body = undefined; - expect(() => ApiGatewayV2Envelope.parse(testEvent, TestSchema)).toThrow(); + // Act & Assess + expect(() => ApiGatewayV2Envelope.parse(event, TestSchema)).toThrow( + ParseError + ); }); - it('should throw when invalid body provided', () => { - const testEvent = - TestEvents.apiGatewayProxyV2Event as APIGatewayProxyEventV2; - testEvent.body = 'invalid'; + it('should parse and return the inner schema in an envelope', () => { + // Prepare + const event = { ...eventPrototype }; + const payload = { name: 'foo', age: 42 }; + event.body = JSON.stringify(payload); - expect(() => ApiGatewayV2Envelope.parse(testEvent, TestSchema)).toThrow(); - }); - it('should throw when invalid event provided', () => { - expect(() => - ApiGatewayV2Envelope.parse({ foo: 'bar' }, TestSchema) - ).toThrow(); + // Act + const parsedEvent = ApiGatewayV2Envelope.parse(event, TestSchema); + + // Assess + expect(parsedEvent).toEqual(payload); }); }); - describe('safeParse', () => { - it('should parse custom schema in envelope', () => { - const testEvent = - TestEvents.apiGatewayProxyV2Event as APIGatewayProxyEventV2; - const data = generateMock(TestSchema); + describe('Method: safeParse', () => { + it('should not throw if the payload does not match the schema', () => { + // Prepare + const event = { ...eventPrototype }; + event.body = JSON.stringify({ name: 'foo' }); - testEvent.body = JSON.stringify(data); + // Act + const parseResult = ApiGatewayV2Envelope.safeParse(event, TestSchema); - expect(ApiGatewayV2Envelope.safeParse(testEvent, TestSchema)).toEqual({ - success: true, - data, + // Assess + expect(parseResult).toEqual({ + success: false, + error: expect.any(ParseError), + originalEvent: event, }); }); - it('should return success false with original body if no body provided', () => { - const testEvent = - TestEvents.apiGatewayProxyV2Event as APIGatewayProxyEventV2; - testEvent.body = undefined; + it('should not throw if the body is undefined', () => { + // Prepare + const event = { ...eventPrototype }; + event.body = undefined; - expect(ApiGatewayV2Envelope.safeParse(testEvent, TestSchema)).toEqual({ + // Act + const parseResult = ApiGatewayV2Envelope.safeParse(event, TestSchema); + + // Assess + expect(parseResult).toEqual({ success: false, - error: expect.any(Error), - originalEvent: testEvent, + error: expect.any(ParseError), + originalEvent: event, }); }); - it('should return success false with original body if invalid body provided', () => { - const testEvent = - TestEvents.apiGatewayProxyV2Event as APIGatewayProxyEventV2; - testEvent.body = 'invalid'; + it('should not throw if the event is invalid', () => { + // Prepare + const event = getTestEvent({ eventsPath, filename: 'invalid' }); + + // Act + const parseResult = ApiGatewayV2Envelope.safeParse(event, TestSchema); - expect(ApiGatewayV2Envelope.safeParse(testEvent, TestSchema)).toEqual({ + // Assess + expect(parseResult).toEqual({ success: false, - error: expect.any(Error), - originalEvent: testEvent, + error: expect.any(ParseError), + originalEvent: event, }); }); - it('should return success false with original event if invalid event provided', () => { - expect( - ApiGatewayV2Envelope.safeParse({ foo: 'bar' }, TestSchema) - ).toEqual({ - success: false, - error: expect.any(Error), - originalEvent: { foo: 'bar' }, + it('should parse and return the inner schema in an envelope', () => { + // Prepare + const event = { ...eventPrototype }; + const payload = { name: 'foo', age: 42 }; + event.body = JSON.stringify(payload); + + // Act + const parsedEvent = ApiGatewayV2Envelope.safeParse(event, TestSchema); + + // Assess + expect(parsedEvent).toEqual({ + success: true, + data: payload, }); }); }); diff --git a/packages/parser/tests/unit/schema/apigw.test.ts b/packages/parser/tests/unit/schema/apigw.test.ts index 802169f313..64a3ea965d 100644 --- a/packages/parser/tests/unit/schema/apigw.test.ts +++ b/packages/parser/tests/unit/schema/apigw.test.ts @@ -1,106 +1,153 @@ /** - * Test built in schema + * Test built-in API Gateway REST schemas * - * @group unit/parser/schema/ + * @group unit/parser/schema/apigw */ +import { + APIGatewayProxyEventSchema, + APIGatewayRequestAuthorizerEventSchema, + APIGatewayTokenAuthorizerEventSchema, +} from '../../../src/schemas/index.js'; +import { getTestEvent } from './utils.js'; -import { APIGatewayProxyEventSchema } from '../../../src/schemas/'; -import { TestEvents } from './utils.js'; +describe('API Gateway REST Schemas', () => { + const eventsPath = 'apigw-rest'; -describe('APIGateway ', () => { - it('should parse api gateway event', () => { - const apiGatewayProxyEvent = TestEvents.apiGatewayProxyEvent; + describe('APIGatewayProxyEventSchema', () => { + it('should throw when the event is invalid', () => { + // Prepare + const event = getTestEvent({ eventsPath, filename: 'invalid' }); - expect(APIGatewayProxyEventSchema.parse(apiGatewayProxyEvent)).toEqual( - apiGatewayProxyEvent - ); - }); - it('should parse api gateway authorizer request event', () => { - const apiGatewayAuthorizerRequestEvent = - TestEvents.apiGatewayAuthorizerRequestEvent; + // Act & Assess + expect(() => APIGatewayProxyEventSchema.parse(event)).toThrow(); + }); - expect( - APIGatewayProxyEventSchema.parse(apiGatewayAuthorizerRequestEvent) - ).toEqual(apiGatewayAuthorizerRequestEvent); - }); - it('should parse schema middleware invalid event', () => { - const apiGatewaySchemaMiddlewareInvalidEvent = - TestEvents.apiGatewaySchemaMiddlewareInvalidEvent; + it('should parse an event with no authorizer', () => { + // Prepare + const event = getTestEvent({ eventsPath, filename: 'no-auth' }); - expect( - APIGatewayProxyEventSchema.parse(apiGatewaySchemaMiddlewareInvalidEvent) - ).toEqual(apiGatewaySchemaMiddlewareInvalidEvent); - }); - it('should parse schema middleware valid event', () => { - const apiGatewaySchemaMiddlewareValidEvent = - TestEvents.apiGatewaySchemaMiddlewareValidEvent; + // Act + const parsedEvent = APIGatewayProxyEventSchema.parse(event); - expect( - APIGatewayProxyEventSchema.parse(apiGatewaySchemaMiddlewareValidEvent) - ).toEqual(apiGatewaySchemaMiddlewareValidEvent); - }); - it('should parse proxy event with no version auth', () => { - const apiGatewayProxyEvent_noVersionAuth = - TestEvents.apiGatewayProxyEvent_noVersionAuth; + // Assess + expect(parsedEvent).toEqual(event); + }); - expect( - APIGatewayProxyEventSchema.parse(apiGatewayProxyEvent_noVersionAuth) - ).toEqual(apiGatewayProxyEvent_noVersionAuth); - }); - it('should parse proxy event with another path', () => { - const apiGatewayProxyEventAnotherPath = - TestEvents.apiGatewayProxyEventAnotherPath; + it('should parse an event with a lambda authorizer', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'lambda-authorizer-auth', + }); - expect( - APIGatewayProxyEventSchema.parse(apiGatewayProxyEventAnotherPath) - ).toEqual(apiGatewayProxyEventAnotherPath); - }); - it('should parse proxy event with path trailing slash', () => { - const apiGatewayProxyEventPathTrailingSlash = - TestEvents.apiGatewayProxyEventPathTrailingSlash; - expect( - APIGatewayProxyEventSchema.parse(apiGatewayProxyEventPathTrailingSlash) - ).toEqual(apiGatewayProxyEventPathTrailingSlash); - }); - it('should parse other proxy event', () => { - const apiGatewayProxyOtherEvent = TestEvents.apiGatewayProxyOtherEvent; - expect(APIGatewayProxyEventSchema.parse(apiGatewayProxyOtherEvent)).toEqual( - apiGatewayProxyOtherEvent - ); + // Act + const parsedEvent = APIGatewayProxyEventSchema.parse(event); + + // Assess + expect(parsedEvent).toEqual(event); + }); + + it('should parse an event with a JWT authorizer', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'jwt-authorizer-auth', + }); + + // Act + const parsedEvent = APIGatewayProxyEventSchema.parse(event); + + // Assess + expect(parsedEvent).toEqual(event); + }); + + it('should parse an event with an IAM authorizer', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'iam-auth', + }); + + // Act + const parsedEvent = APIGatewayProxyEventSchema.parse(event); + + // Assess + expect(parsedEvent).toEqual(event); + }); + + it('should parse an event sent by the AWS console test UI', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'console-test-ui', + }); + + // Act + const parsedEvent = APIGatewayProxyEventSchema.parse(event); + + // Assess + expect(parsedEvent).toEqual(event); + }); + + it('should parse an event sent as a part of a websocket API', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'websocket', + }); + + // Act + const parsedEvent = APIGatewayProxyEventSchema.parse(event); + + // Assess + expect(parsedEvent).toEqual(event); + }); }); - it('should not throw when event has sourceIp as test-invoke-source-ip', () => { - const apiGatewayProxyEventTestUi = TestEvents.apiGatewayProxyEventTestUI; - expect(() => - APIGatewayProxyEventSchema.parse(apiGatewayProxyEventTestUi) - ).not.toThrow(); + + describe('APIGatewayRequestAuthorizerEventSchema', () => { + it('should throw when the event is invalid', () => { + // Prepare + const event = getTestEvent({ eventsPath, filename: 'invalid' }); + + // Act & Assess + expect(() => + APIGatewayRequestAuthorizerEventSchema.parse(event) + ).toThrow(); + }); + + it('should parse the authorizer event', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'authorizer-request', + }); + + // Act + const parsedEvent = APIGatewayRequestAuthorizerEventSchema.parse(event); + + // Assess + expect(parsedEvent).toEqual(event); + }); }); - it('should throw error when event is not a valid proxy event', () => { - const event = { - resource: '/', - path: '/', - httpMethod: 'GET', - headers: {}, - multiValueHeaders: {}, - isBase64Encoded: false, - body: 'Foo!', - requestContext: { - accountId: '1234', - apiId: 'myApi', - httpMethod: 'GET', - identity: { - sourceIp: '127.0.0.1', - }, - path: '/', - protocol: 'Https', - requestId: '1234', - requestTime: '2018-09-07T16:20:46Z', - requestTimeEpoch: 1536992496000, - resourcePath: '/', - stage: 'test', - eventType: 'DISCONNECT', - messageId: 'messageId', - }, - }; - expect(() => APIGatewayProxyEventSchema.parse(event)).toThrow(); + + describe('APIGatewayTokenAuthorizerEventSchema', () => { + it('should throw when the event is invalid', () => { + // Prepare + const event = getTestEvent({ eventsPath, filename: 'invalid' }); + + // Act & Assess + expect(() => APIGatewayTokenAuthorizerEventSchema.parse(event)).toThrow(); + }); + + it('should parse the event', () => { + // Prepare + const event = getTestEvent({ eventsPath, filename: 'authorizer-token' }); + + // Act + const parsedEvent = APIGatewayTokenAuthorizerEventSchema.parse(event); + + // Assess + expect(parsedEvent).toEqual(event); + }); }); }); diff --git a/packages/parser/tests/unit/schema/apigwv2.test.ts b/packages/parser/tests/unit/schema/apigwv2.test.ts index 1ebb547c7f..15716ab30f 100644 --- a/packages/parser/tests/unit/schema/apigwv2.test.ts +++ b/packages/parser/tests/unit/schema/apigwv2.test.ts @@ -1,67 +1,103 @@ /** - * Test built in schema + * Test built-in API Gateway HTTP API (v2) schemas * - * @group unit/parser/schema/ + * @group unit/parser/schema/apigwv2 */ +import { + APIGatewayProxyEventV2Schema, + APIGatewayRequestAuthorizerEventV2Schema, +} from '../../../src/schemas/index.js'; +import { getTestEvent } from './utils.js'; -import { APIGatewayProxyEventV2Schema } from '../../../src/schemas/'; -import { TestEvents } from './utils.js'; +describe('API Gateway HTTP (v2) Schemas', () => { + const eventsPath = 'apigw-http'; -describe('API GW v2 ', () => { - it('should parse api gateway v2 event', () => { - const apiGatewayProxyV2Event = TestEvents.apiGatewayProxyV2Event; + describe('APIGatewayProxyEventV2Schema', () => { + it('should throw when the event is invalid', () => { + // Prepare + const event = getTestEvent({ eventsPath, filename: 'invalid' }); - expect(APIGatewayProxyEventV2Schema.parse(apiGatewayProxyV2Event)).toEqual( - apiGatewayProxyV2Event - ); - }); - it('should parse api gateway v2 event with GET method', () => { - const apiGatewayProxyV2Event_GET = TestEvents.apiGatewayProxyV2Event_GET; - expect( - APIGatewayProxyEventV2Schema.parse(apiGatewayProxyV2Event_GET) - ).toEqual(apiGatewayProxyV2Event_GET); - }); - it('should parse api gateway v2 event with path trailing slash', () => { - const apiGatewayProxyV2EventPathTrailingSlash = - TestEvents.apiGatewayProxyV2EventPathTrailingSlash; - - expect( - APIGatewayProxyEventV2Schema.parse( - apiGatewayProxyV2EventPathTrailingSlash - ) - ).toEqual(apiGatewayProxyV2EventPathTrailingSlash); - }); - it('should parse api gateway v2 event with iam', () => { - const apiGatewayProxyV2IamEvent = TestEvents.apiGatewayProxyV2IamEvent; + // Act & Assess + expect(() => APIGatewayProxyEventV2Schema.parse(event)).toThrow(); + }); - expect( - APIGatewayProxyEventV2Schema.parse(apiGatewayProxyV2IamEvent) - ).toEqual(apiGatewayProxyV2IamEvent); - }); - it('should parse api gateway v2 event with lambda authorizer', () => { - const apiGatewayProxyV2LambdaAuthorizerEvent = - TestEvents.apiGatewayProxyV2LambdaAuthorizerEvent; + it('should parse an event with no authorizer', () => { + // Prepare + const event = getTestEvent({ eventsPath, filename: 'no-auth' }); - expect( - APIGatewayProxyEventV2Schema.parse(apiGatewayProxyV2LambdaAuthorizerEvent) - ).toEqual(apiGatewayProxyV2LambdaAuthorizerEvent); - }); - it('should parse api gateway v2 event with other get event', () => { - const apiGatewayProxyV2OtherGetEvent = - TestEvents.apiGatewayProxyV2OtherGetEvent; + // Act + const parsedEvent = APIGatewayProxyEventV2Schema.parse(event); + + // Assess + expect(parsedEvent).toEqual(event); + }); + + it('should parse an event with a lambda authorizer', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'lambda-authorizer-auth', + }); + + // Act + const parsedEvent = APIGatewayProxyEventV2Schema.parse(event); + + // Assess + expect(parsedEvent).toEqual(event); + }); + + it('should parse an event with a JWT authorizer', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'jwt-authorizer-auth', + }); - expect( - APIGatewayProxyEventV2Schema.parse(apiGatewayProxyV2OtherGetEvent) - ).toEqual(apiGatewayProxyV2OtherGetEvent); + // Act + const parsedEvent = APIGatewayProxyEventV2Schema.parse(event); + + // Assess + expect(parsedEvent).toEqual(event); + }); + + it('should parse an event with an IAM authorizer', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'iam-auth', + }); + + // Act + const parsedEvent = APIGatewayProxyEventV2Schema.parse(event); + + // Assess + expect(parsedEvent).toEqual(event); + }); }); - it('should parse api gateway v2 event with schema middleware', () => { - const apiGatewayProxyV2SchemaMiddlewareValidEvent = - TestEvents.apiGatewayProxyV2SchemaMiddlewareValidEvent; - - expect( - APIGatewayProxyEventV2Schema.parse( - apiGatewayProxyV2SchemaMiddlewareValidEvent - ) - ).toEqual(apiGatewayProxyV2SchemaMiddlewareValidEvent); + + describe('APIGatewayRequestAuthorizerEventV2Schema', () => { + it('should throw when the event is invalid', () => { + // Prepare + const event = getTestEvent({ eventsPath, filename: 'invalid' }); + + // Act & Assess + expect(() => + APIGatewayRequestAuthorizerEventV2Schema.parse(event) + ).toThrow(); + }); + + it('should parse the authorizer event', () => { + // Prepare + const event = getTestEvent({ + eventsPath, + filename: 'authorizer-request', + }); + + // Act + const parsedEvent = APIGatewayRequestAuthorizerEventV2Schema.parse(event); + + // Assess + expect(parsedEvent).toEqual(event); + }); }); }); diff --git a/packages/parser/tests/unit/schema/utils.ts b/packages/parser/tests/unit/schema/utils.ts index 03ab950348..3e1ad00133 100644 --- a/packages/parser/tests/unit/schema/utils.ts +++ b/packages/parser/tests/unit/schema/utils.ts @@ -1,4 +1,5 @@ import { readFileSync } from 'node:fs'; +import { join } from 'node:path'; import { z } from 'zod'; export const TestSchema = z.object({ @@ -115,3 +116,17 @@ const createTestEvents = (fileList: readonly string[]): TestEvents => { }; export const TestEvents = createTestEvents(filenames); + +export const getTestEvent = >({ + eventsPath, + filename, +}: { + eventsPath: string; + filename: string; +}): T => + JSON.parse( + readFileSync( + join(__dirname, '..', '..', 'events', eventsPath, `${filename}.json`), + 'utf-8' + ) + ) as T; diff --git a/packages/parser/typedoc.json b/packages/parser/typedoc.json index ed0ca6fc47..51ddecfe5f 100644 --- a/packages/parser/typedoc.json +++ b/packages/parser/typedoc.json @@ -3,7 +3,11 @@ "../../typedoc.base.json" ], "entryPoints": [ - "./src/index.ts" + "./src/index.ts", + "./src/middleware/parser.ts", + "./src/types/index.ts", + "./src/envelopes/index.ts", + "./src/schemas/index.ts" ], "readme": "README.md" } \ No newline at end of file diff --git a/packages/testing/CHANGELOG.md b/packages/testing/CHANGELOG.md index 2381407be1..00f1eadfe1 100644 --- a/packages/testing/CHANGELOG.md +++ b/packages/testing/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. +# [2.3.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.2.0...v2.3.0) (2024-06-27) + +**Note:** Version bump only for package @aws-lambda-powertools/testing-utils + + + + + # [2.2.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.1...v2.2.0) (2024-06-13) **Note:** Version bump only for package @aws-lambda-powertools/testing-utils diff --git a/packages/testing/package.json b/packages/testing/package.json index 0e9b95786a..5f037d8616 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/testing-utils", - "version": "2.2.0", + "version": "2.3.0", "description": "A package containing utilities to test your serverless workloads", "author": { "name": "Amazon Web Services", @@ -92,9 +92,9 @@ "homepage": "https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/packages/testing#readme", "dependencies": { "@aws-cdk/cli-lib-alpha": "^2.121.1-alpha.0", - "@aws-sdk/client-lambda": "^3.596.0", + "@aws-sdk/client-lambda": "^3.600.0", "@smithy/util-utf8": "^3.0.0", - "aws-cdk-lib": "^2.145.0", - "esbuild": "^0.21.4" + "aws-cdk-lib": "^2.146.0", + "esbuild": "^0.21.5" } } diff --git a/packages/tracer/CHANGELOG.md b/packages/tracer/CHANGELOG.md index 9569419ecc..d96ed808f0 100644 --- a/packages/tracer/CHANGELOG.md +++ b/packages/tracer/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. +# [2.3.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.2.0...v2.3.0) (2024-06-27) + +**Note:** Version bump only for package @aws-lambda-powertools/tracer + + + + + # [2.2.0](https://github.com/aws-powertools/powertools-lambda-typescript/compare/v2.1.1...v2.2.0) (2024-06-13) **Note:** Version bump only for package @aws-lambda-powertools/tracer diff --git a/packages/tracer/package.json b/packages/tracer/package.json index 5fd195c42b..6ba185cdf0 100644 --- a/packages/tracer/package.json +++ b/packages/tracer/package.json @@ -1,6 +1,6 @@ { "name": "@aws-lambda-powertools/tracer", - "version": "2.2.0", + "version": "2.3.0", "description": "The tracer package for the Powertools for AWS Lambda (TypeScript) library", "author": { "name": "Amazon Web Services", @@ -29,10 +29,10 @@ "license": "MIT-0", "devDependencies": { "@aws-lambda-powertools/testing-utils": "file:../testing", - "@aws-sdk/client-dynamodb": "^3.596.0", - "@aws-sdk/client-xray": "^3.596.0", + "@aws-sdk/client-dynamodb": "^3.602.0", + "@aws-sdk/client-xray": "^3.600.0", "@types/promise-retry": "^1.1.6", - "aws-sdk": "^2.1639.0", + "aws-sdk": "^2.1648.0", "promise-retry": "^2.0.1" }, "peerDependencies": { @@ -89,7 +89,7 @@ "url": "https://github.com/aws-powertools/powertools-lambda-typescript/issues" }, "dependencies": { - "@aws-lambda-powertools/commons": "^2.2.0", + "@aws-lambda-powertools/commons": "^2.3.0", "aws-xray-sdk-core": "^3.9.0" }, "keywords": [ diff --git a/typedoc.json b/typedoc.json index daadd7bc2e..36bef91ee3 100644 --- a/typedoc.json +++ b/typedoc.json @@ -13,6 +13,7 @@ "layers", "examples/**" ], + "plugin": ["typedoc-plugin-zod"], "skipErrorChecking": true, "excludePrivate": true, "visibilityFilters": {