diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index c63c52fdee..c5c86da51d 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,65 +1,15 @@ -FROM mcr.microsoft.com/devcontainers/base:ubuntu -ARG TARGETARCH -ENV TARGETARCH=${TARGETARCH} - -ARG ASDF_VERSION -COPY .tool-versions.asdf /tmp/.tool-versions.asdf - -# Add amd64 architecture if on arm64 -RUN if [ "$TARGETARCH" == "arm64" ] || [ "$TARGETARCH" == "aarch64" ]; then dpkg --add-architecture amd64; fi - -RUN apt-get update \ - && export DEBIAN_FRONTEND=noninteractive \ - && apt-get -y dist-upgrade \ - && apt-get -y install --no-install-recommends htop vim curl git build-essential \ - libffi-dev libssl-dev libxml2-dev libxslt1-dev libjpeg8-dev libbz2-dev \ - zlib1g-dev unixodbc unixodbc-dev libsecret-1-0 libsecret-1-dev libsqlite3-dev \ - jq apt-transport-https ca-certificates gnupg-agent \ - software-properties-common bash-completion python3-pip make libbz2-dev \ - libreadline-dev libsqlite3-dev wget llvm libncurses5-dev libncursesw5-dev \ - xz-utils tk-dev liblzma-dev netcat-traditional libyaml-dev uuid-runtime xxd unzip - -# install aws stuff -# Download correct AWS CLI for arch -RUN if [ "$TARGETARCH" = "arm64" ] || [ "$TARGETARCH" == "aarch64" ]; then \ - wget -O /tmp/awscliv2.zip "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip"; \ +ARG IMAGE_NAME=node_24_python_3_14 +ARG IMAGE_VERSION=latest +FROM ghcr.io/nhsdigital/eps-devcontainers/${IMAGE_NAME}:${IMAGE_VERSION} + +USER root +# specify DOCKER_GID to force container docker group id to match host +RUN if [ -n "${DOCKER_GID}" ]; then \ + if ! getent group docker; then \ + groupadd -g ${DOCKER_GID} docker; \ else \ - wget -O /tmp/awscliv2.zip "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip"; \ + groupmod -g ${DOCKER_GID} docker; \ fi && \ - unzip /tmp/awscliv2.zip -d /tmp/aws-cli && \ - /tmp/aws-cli/aws/install && \ - rm /tmp/awscliv2.zip && rm -rf /tmp/aws-cli - -# Install ASDF -RUN ASDF_VERSION=$(awk '!/^#/ && NF {print $1; exit}' /tmp/.tool-versions.asdf) && \ - wget -O /tmp/asdf.tar.gz https://github.com/asdf-vm/asdf/releases/download/v${ASDF_VERSION}/asdf-v${ASDF_VERSION}-linux-amd64.tar.gz; \ - tar -xvzf /tmp/asdf.tar.gz; \ - mv asdf /usr/bin - -USER vscode - -ENV PATH="/home/vscode/.asdf/shims/:$PATH" -RUN \ - echo 'PATH="/home/vscode/.asdf/shims/:$PATH"' >> ~/.bashrc; \ - echo '. <(asdf completion bash)' >> ~/.bashrc; \ - echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc; \ - echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc; \ - echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc; - -# Install ASDF plugins -RUN asdf plugin add python; \ - asdf plugin add poetry https://github.com/asdf-community/asdf-poetry.git; \ - asdf plugin add shellcheck https://github.com/luizm/asdf-shellcheck.git; \ - asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git; \ - asdf plugin add direnv; \ - asdf plugin add actionlint; \ - asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git - - -WORKDIR /workspaces/eps-prescription-tracker-ui -ADD .tool-versions /workspaces/eps-prescription-tracker-ui/.tool-versions -ADD .tool-versions /home/vscode/.tool-versions - -# install python before poetry to ensure correct python version is used -RUN asdf install python; \ - asdf install + usermod -aG docker vscode; \ + fi + diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 46c458faef..90f376085d 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,86 +1,77 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the -// README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu { - "name": "Ubuntu", - // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile - "build": { - "dockerfile": "Dockerfile", - "context": "..", - "args": {} - }, - "mounts": [ - "source=${env:HOME}${env:USERPROFILE}/.aws,target=/home/vscode/.aws,type=bind", - "source=${env:HOME}${env:USERPROFILE}/.ssh,target=/home/vscode/.ssh,type=bind", - "source=${env:HOME}${env:USERPROFILE}/.gnupg,target=/home/vscode/.gnupg,type=bind", - "source=${env:HOME}${env:USERPROFILE}/.npmrc,target=/home/vscode/.npmrc,type=bind" - ], - "runArgs": [ - "--network=host" - ], - "remoteEnv": { "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" }, - "postAttachCommand": "docker build -f https://raw.githubusercontent.com/NHSDigital/eps-workflow-quality-checks/refs/tags/v4.0.4/dockerfiles/nhsd-git-secrets.dockerfile -t git-secrets . && poetry run pre-commit install --install-hooks -f", - "features": { - "ghcr.io/devcontainers/features/docker-outside-of-docker:1": { - "version": "latest", - "moby": "true", - "installDockerBuildx": "true" - }, - "ghcr.io/devcontainers/features/github-cli:1": {} - }, - "customizations": { - "vscode": { - "extensions": [ - "AmazonWebServices.aws-toolkit-vscode", - "redhat.vscode-yaml", - "ms-python.python", - "ms-python.flake8", - "eamodio.gitlens", - "github.vscode-pull-request-github", - "orta.vscode-jest", - "42crunch.vscode-openapi", - "mermade.openapi-lint", - "christian-kohler.npm-intellisense", - "dbaeumer.vscode-eslint", - "lfm.vscode-makefile-term", - "GrapeCity.gc-excelviewer", - "redhat.vscode-xml", - "streetsidesoftware.code-spell-checker", - "timonwong.shellcheck", - "mkhl.direnv", - "github.vscode-github-actions", - "Gruntfuggly.todo-tree", - "ms-vscode.makefile-tools" + "name": "eps-prescription-tracker-ui", + "build": { + "dockerfile": "Dockerfile", + "context": "..", + "args": { + "DOCKER_GID": "${env:DOCKER_GID:}", + "IMAGE_NAME": "node_24_python_3_14", + "IMAGE_VERSION": "v1.0.7", + "USER_UID": "${localEnv:USER_ID:}", + "USER_GID": "${localEnv:GROUP_ID:}" + } + }, + "mounts": [ + "source=${env:HOME}${env:USERPROFILE}/.aws,target=/home/vscode/.aws,type=bind", + "source=${env:HOME}${env:USERPROFILE}/.ssh,target=/home/vscode/.ssh,type=bind", + "source=${env:HOME}${env:USERPROFILE}/.gnupg,target=/home/vscode/.gnupg,type=bind", + "source=${env:HOME}${env:USERPROFILE}/.npmrc,target=/home/vscode/.npmrc,type=bind" + ], + "runArgs": [ + "--network=host" + ], + "remoteEnv": { + "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" + }, + "postAttachCommand": "git-secrets --register-aws; git-secrets --add-provider -- cat /usr/share/secrets-scanner/nhsd-rules-deny.txt", + "features": {}, + "customizations": { + "vscode": { + "extensions": [ + "AmazonWebServices.aws-toolkit-vscode", + "redhat.vscode-yaml", + "ms-python.python", + "ms-python.flake8", + "eamodio.gitlens", + "github.vscode-pull-request-github", + "orta.vscode-jest", + "42crunch.vscode-openapi", + "mermade.openapi-lint", + "christian-kohler.npm-intellisense", + "dbaeumer.vscode-eslint", + "lfm.vscode-makefile-term", + "GrapeCity.gc-excelviewer", + "redhat.vscode-xml", + "streetsidesoftware.code-spell-checker", + "timonwong.shellcheck", + "mkhl.direnv", + "github.vscode-github-actions", + "Gruntfuggly.todo-tree", + "ms-vscode.makefile-tools" + ], + "settings": { + "python.defaultInterpreterPath": "/workspaces/eps-prescription-tracker-ui/.venv/bin/python", + "python.analysis.autoSearchPaths": true, + "python.analysis.extraPaths": [], + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true, + "pylint.enabled": false, + "python.linting.flake8Enabled": true, + "python.linting.enabled": true, + "editor.formatOnPaste": false, + "editor.formatOnType": false, + "editor.formatOnSave": true, + "editor.formatOnSaveMode": "file", + "cSpell.words": [ + "fhir", + "Formik", + "pino", + "serialisation" ], - "settings": { - "python.defaultInterpreterPath": "/workspaces/eps-prescription-tracker-ui/.venv/bin/python", - "python.analysis.autoSearchPaths": true, - "python.analysis.extraPaths": [], - "python.testing.unittestEnabled": false, - "python.testing.pytestEnabled": true, - "pylint.enabled": false, - "python.linting.flake8Enabled": true, - "python.linting.enabled": true, // required to format on save - "editor.formatOnPaste": false, // required - "editor.formatOnType": false, // required - "editor.formatOnSave": true, // optional - "editor.formatOnSaveMode": "file", - "cSpell.words": ["fhir", "Formik", "pino", "serialisation"], - "editor.defaultFormatter": "dbaeumer.vscode-eslint" - - }, - "eslint.useFlatConfig": true, - "eslint.format.enable": true - } - }, - "postCreateCommand": "rm -f ~/.docker/config.json; git config --global --add safe.directory /workspaces/eps-prescription-tracker-ui; make install; direnv allow ." - // "features": {}, - // Use 'forwardPorts' to make a list of ports inside the container available locally. - // "forwardPorts": [], - // Use 'postCreateCommand' to run commands after the container is created. - // "postCreateCommand": "" - // Configure tool-specific properties. - // "customizations": {}, - // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. - // "remoteUser": "root" + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, + "eslint.useFlatConfig": true, + "eslint.format.enable": true + } } - +} diff --git a/.github/scripts/call_mark_jira_released.sh b/.github/scripts/call_mark_jira_released.sh deleted file mode 100755 index 6bd62438c5..0000000000 --- a/.github/scripts/call_mark_jira_released.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -echo "calling mark jira released" - -cat < payload.json -{ - "releaseVersion": "Clinical-Tracker-$RELEASE_TAG" -} -EOF -cat payload.json - -function_arn=$(aws cloudformation list-exports --query "Exports[?Name=='release-notes:MarkJiraReleasedLambdaArn'].Value" --output text) -aws lambda invoke --function-name "${function_arn}" --cli-binary-format raw-in-base64-out --payload file://payload.json out.txt -cat out.txt diff --git a/.github/scripts/create_env_release_notes.sh b/.github/scripts/create_env_release_notes.sh deleted file mode 100755 index f892a23699..0000000000 --- a/.github/scripts/create_env_release_notes.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash - -cat < payload.json -{ - "currentTag": "$CURRENT_DEPLOYED_TAG", - "targetTag": "$DEV_TAG", - "repoName": "eps-prescription-tracker-ui", - "targetEnvironment": "$ENV", - "productName": "Clinical Tracker UI", - "releaseNotesPageId": "$PAGE_ID", - "releaseNotesPageTitle": "Current Clinical Tracker UI release notes - $ENV" -} -EOF -cat payload.json - -function_arn=$(aws cloudformation list-exports --query "Exports[?Name=='release-notes:CreateReleaseNotesLambdaArn'].Value" --output text) -aws lambda invoke --function-name "${function_arn}" --cli-binary-format raw-in-base64-out --payload file://payload.json out.txt -cat out.txt diff --git a/.github/scripts/create_int_rc_release_notes.sh b/.github/scripts/create_int_rc_release_notes.sh deleted file mode 100755 index 81cac7ba24..0000000000 --- a/.github/scripts/create_int_rc_release_notes.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -cat < payload.json -{ - "currentTag": "$CURRENT_DEPLOYED_TAG", - "targetTag": "$RELEASE_TAG", - "repoName": "eps-prescription-tracker-ui", - "targetEnvironment": "INT", - "productName": "Clinical Tracker UI", - "releaseNotesPageId": "$PAGE_ID", - "releaseNotesPageTitle": "Clinical-Tracker-UI-$RELEASE_TAG - Deployed to [INT] on $(date +'%d-%m-%y')", - "createReleaseCandidate": "true", - "releasePrefix": "Clinical-Tracker-UI-" -} -EOF -cat payload.json - -function_arn=$(aws cloudformation list-exports --query "Exports[?Name=='release-notes:CreateReleaseNotesLambdaArn'].Value" --output text) -aws lambda invoke --function-name "${function_arn}" --cli-binary-format raw-in-base64-out --payload file://payload.json out.txt -cat out.txt diff --git a/.github/scripts/get_current_dev_tag.sh b/.github/scripts/get_current_dev_tag.sh deleted file mode 100755 index 3e7f0e949b..0000000000 --- a/.github/scripts/get_current_dev_tag.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -dev_tag=$(aws cloudformation describe-stacks --stack-name cpt-ui-stateful-resources --query "Stacks[0].Tags[?Key=='version'].Value" --output text) - -echo "DEV_TAG=${dev_tag}" >> "$GITHUB_ENV" diff --git a/.github/scripts/get_target_deployed_tag.sh b/.github/scripts/get_target_deployed_tag.sh deleted file mode 100755 index 12b027bcd6..0000000000 --- a/.github/scripts/get_target_deployed_tag.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -current_deployed_tag=$(aws cloudformation describe-stacks --stack-name cpt-ui-stateful-resources --query "Stacks[0].Tags[?Key=='version'].Value" --output text) - -if [ -z "$current_deployed_tag" ] -then - current_deployed_tag=v1.0.0-beta -fi - -echo "CURRENT_DEPLOYED_TAG=${current_deployed_tag}" >> "$GITHUB_ENV" diff --git a/.github/workflows/cdk_package_code.yml b/.github/workflows/cdk_package_code.yml index a7d073cc43..69d4d8db45 100644 --- a/.github/workflows/cdk_package_code.yml +++ b/.github/workflows/cdk_package_code.yml @@ -9,47 +9,31 @@ on: COMMIT_ID: required: true type: string + pinned_image: + required: true + type: string jobs: package_code: runs-on: ubuntu-22.04 + container: + image: ${{ inputs.pinned_image }} + options: --user 1001:1001 --group-add 128 + defaults: + run: + shell: bash permissions: id-token: write contents: read packages: read steps: + - name: copy .tool-versions + run: | + cp /home/vscode/.tool-versions "$HOME/.tool-versions" - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd with: ref: ${{ env.BRANCH_NAME }} - - # using git commit sha for version of action to ensure we have stable version - - name: Get asdf version - id: asdf-version - run: echo "version=$(awk '!/^#/ && NF {print $1; exit}' .tool-versions.asdf)" >> "$GITHUB_OUTPUT" - - # using git commit sha for version of action to ensure we have stable version - - name: Install asdf - uses: asdf-vm/actions/setup@b7bcd026f18772e44fe1026d729e1611cc435d47 - with: - asdf_version: ${{ steps.asdf-version.outputs.version }} - - - name: Cache asdf - uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 - with: - path: | - ~/.asdf - key: ${{ runner.os }}-asdf-${{ hashFiles('**/.tool-versions') }}-${{ steps.asdf-version.outputs.version }} - restore-keys: | - ${{ runner.os }}-asdf-${{ hashFiles('**/.tool-versions') }}-${{ steps.asdf-version.outputs.version }} - - - name: Install asdf dependencies in .tool-versions - uses: asdf-vm/actions/install@b7bcd026f18772e44fe1026d729e1611cc435d47 - with: - asdf_version: ${{ steps.asdf-version.outputs.version }} - env: - PYTHON_CONFIGURE_OPTS: --enable-shared - - name: make install run: | make install @@ -58,7 +42,6 @@ jobs: - name: "Tar files" run: | tar -rf artifact.tar \ - .tool-versions \ packages \ node_modules \ package.json \ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b040dd16d6..1e6975a433 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,29 +8,15 @@ env: BRANCH_NAME: ${{ github.event.ref.BRANCH_NAME }} jobs: - get_asdf_version: - runs-on: ubuntu-22.04 - outputs: - asdf_version: ${{ steps.asdf-version.outputs.version }} - tag_format: ${{ steps.load-config.outputs.TAG_FORMAT }} - steps: - - name: Checkout code - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd - - - name: Get asdf version - id: asdf-version - run: echo "version=$(awk '!/^#/ && NF {print $1; exit}' .tool-versions.asdf)" >> "$GITHUB_OUTPUT" - - name: Load config value - id: load-config - run: | - TAG_FORMAT=$(yq '.TAG_FORMAT' .github/config/settings.yml) - echo "TAG_FORMAT=$TAG_FORMAT" >> "$GITHUB_OUTPUT" - + get_config_values: + uses: NHSDigital/eps-common-workflows/.github/workflows/get-repo-config.yml@5ac2707dd9cd60ad127275179495b9c890d74711 + with: + verify_published_from_main_image: true quality_checks: - uses: NHSDigital/eps-common-workflows/.github/workflows/quality-checks.yml@383f3f9eaf3cb553ebcd74897bfed4d5e387629e - needs: [get_asdf_version] + uses: NHSDigital/eps-common-workflows/.github/workflows/quality-checks-devcontainer.yml@5ac2707dd9cd60ad127275179495b9c890d74711 + needs: [get_config_values] with: - asdfVersion: ${{ needs.get_asdf_version.outputs.asdf_version }} + pinned_image: ${{ needs.get_config_values.outputs.pinned_image }} secrets: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} @@ -45,26 +31,31 @@ jobs: echo "commit_id=${{ github.sha }}" >> "$GITHUB_OUTPUT" tag_release: - needs: [quality_checks, get_commit_id, get_asdf_version] - uses: NHSDigital/eps-common-workflows/.github/workflows/tag-release.yml@383f3f9eaf3cb553ebcd74897bfed4d5e387629e + needs: [quality_checks, get_commit_id, get_config_values] + uses: NHSDigital/eps-common-workflows/.github/workflows/tag-release-devcontainer.yml@5ac2707dd9cd60ad127275179495b9c890d74711 + permissions: + id-token: write + contents: write with: dry_run: true - asdfVersion: ${{ needs.get_asdf_version.outputs.asdf_version }} + pinned_image: ${{ needs.get_config_values.outputs.pinned_image }} branch_name: main - tag_format: ${{ needs.get_asdf_version.outputs.tag_format }} + tag_format: ${{ needs.get_config_values.outputs.tag_format }} secrets: inherit package_code: - needs: [tag_release, get_commit_id] + needs: [tag_release, get_commit_id, get_config_values] uses: ./.github/workflows/cdk_package_code.yml with: VERSION_NUMBER: ${{needs.tag_release.outputs.version_tag}} COMMIT_ID: ${{needs.get_commit_id.outputs.commit_id}} + pinned_image: ${{ needs.get_config_values.outputs.pinned_image }} release_dev: - needs: [tag_release, package_code, get_commit_id] + needs: [tag_release, package_code, get_commit_id, get_config_values] uses: ./.github/workflows/release_all_stacks.yml with: + pinned_image: ${{ needs.get_config_values.outputs.pinned_image }} SERVICE_NAME: cpt-ui TARGET_ENVIRONMENT: dev VERSION_NUMBER: ${{needs.tag_release.outputs.version_tag}} @@ -95,18 +86,15 @@ jobs: ROUTE53_EXPORT_NAME: EPS REACT_LOG_LEVEL: "debug" LOG_RETENTION_IN_DAYS: 30 - CREATE_INT_RELEASE_NOTES: true - CREATE_PROD_RELEASE_NOTES: true - MARK_JIRA_RELEASED: false - CREATE_INT_RC_RELEASE_NOTES: false IS_PULL_REQUEST: false FORWARD_CSOC_LOGS: false secrets: inherit release_qa: - needs: [tag_release, release_dev, package_code, get_commit_id] + needs: [tag_release, release_dev, package_code, get_commit_id, get_config_values] uses: ./.github/workflows/release_all_stacks.yml with: + pinned_image: ${{ needs.get_config_values.outputs.pinned_image }} SERVICE_NAME: cpt-ui TARGET_ENVIRONMENT: qa VERSION_NUMBER: ${{needs.tag_release.outputs.version_tag}} diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 6dc5907566..cc5bec54fd 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -8,30 +8,16 @@ env: BRANCH_NAME: ${{ github.event.pull_request.head.ref }} jobs: + get_config_values: + uses: NHSDigital/eps-common-workflows/.github/workflows/get-repo-config.yml@5ac2707dd9cd60ad127275179495b9c890d74711 + with: + verify_published_from_main_image: false dependabot-auto-approve-and-merge: needs: quality_checks - uses: NHSDigital/eps-common-workflows/.github/workflows/dependabot-auto-approve-and-merge.yml@e208462679dedaded1e066c25c9830b9c0bf1930 + uses: NHSDigital/eps-common-workflows/.github/workflows/dependabot-auto-approve-and-merge.yml@5ac2707dd9cd60ad127275179495b9c890d74711 secrets: AUTOMERGE_APP_ID: ${{ secrets.AUTOMERGE_APP_ID }} AUTOMERGE_PEM: ${{ secrets.AUTOMERGE_PEM }} - get_asdf_version: - runs-on: ubuntu-22.04 - outputs: - asdf_version: ${{ steps.asdf-version.outputs.version }} - tag_format: ${{ steps.load-config.outputs.TAG_FORMAT }} - steps: - - name: Checkout code - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd - - - name: Get asdf version - id: asdf-version - run: echo "version=$(awk '!/^#/ && NF {print $1; exit}' .tool-versions.asdf)" >> "$GITHUB_OUTPUT" - - name: Load config value - id: load-config - run: | - TAG_FORMAT=$(yq '.TAG_FORMAT' .github/config/settings.yml) - echo "TAG_FORMAT=$TAG_FORMAT" >> "$GITHUB_OUTPUT" - get_commit_message: runs-on: ubuntu-22.04 outputs: @@ -49,10 +35,10 @@ jobs: quality_checks: # always run, but only block in the non-skip case - needs: [get_commit_message, get_asdf_version] - uses: NHSDigital/eps-common-workflows/.github/workflows/quality-checks.yml@383f3f9eaf3cb553ebcd74897bfed4d5e387629e + needs: [get_commit_message, get_config_values] + uses: NHSDigital/eps-common-workflows/.github/workflows/quality-checks-devcontainer.yml@5ac2707dd9cd60ad127275179495b9c890d74711 with: - asdfVersion: ${{ needs.get_asdf_version.outputs.asdf_version }} + pinned_image: ${{ needs.get_config_values.outputs.pinned_image }} secrets: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} @@ -120,7 +106,7 @@ jobs: run: echo "Skipping QC gate per commit message." pr_title_format_check: - uses: NHSDigital/eps-common-workflows/.github/workflows/pr_title_check.yml@383f3f9eaf3cb553ebcd74897bfed4d5e387629e + uses: NHSDigital/eps-common-workflows/.github/workflows/pr_title_check.yml@5ac2707dd9cd60ad127275179495b9c890d74711 get_issue_number: runs-on: ubuntu-22.04 @@ -149,13 +135,16 @@ jobs: result-encoding: string tag_release: - needs: [get_asdf_version] - uses: NHSDigital/eps-common-workflows/.github/workflows/tag-release.yml@383f3f9eaf3cb553ebcd74897bfed4d5e387629e + needs: [get_config_values] + uses: NHSDigital/eps-common-workflows/.github/workflows/tag-release-devcontainer.yml@5ac2707dd9cd60ad127275179495b9c890d74711 + permissions: + id-token: write + contents: write with: dry_run: true - asdfVersion: ${{ needs.get_asdf_version.outputs.asdf_version }} + pinned_image: ${{ needs.get_config_values.outputs.pinned_image }} branch_name: ${{ github.event.pull_request.head.ref }} - tag_format: ${{ needs.get_asdf_version.outputs.tag_format }} + tag_format: ${{ needs.get_config_values.outputs.tag_format }} secrets: inherit get_commit_id: @@ -169,7 +158,7 @@ jobs: echo "commit_id=${{ github.sha }}" >> "$GITHUB_OUTPUT" package_code: - needs: [get_issue_number, get_commit_id, quality_gate] + needs: [get_issue_number, get_commit_id, quality_gate, get_config_values] if: | always() && ! contains(needs.*.result, 'failure') && @@ -178,15 +167,17 @@ jobs: with: VERSION_NUMBER: PR-${{ needs.get_issue_number.outputs.issue_number }} COMMIT_ID: ${{ needs.get_commit_id.outputs.commit_id }} + pinned_image: ${{ needs.get_config_values.outputs.pinned_image }} release_code: - needs: [get_issue_number, package_code, get_commit_id] + needs: [get_issue_number, package_code, get_commit_id, get_config_values] if: | always() && ! contains(needs.*.result, 'failure') && ! contains(needs.*.result, 'cancelled') uses: ./.github/workflows/release_all_stacks.yml with: + pinned_image: ${{ needs.get_config_values.outputs.pinned_image }} SERVICE_NAME: cpt-ui-pr-${{needs.get_issue_number.outputs.issue_number}} TARGET_ENVIRONMENT: dev-pr VERSION_NUMBER: PR-${{ needs.get_issue_number.outputs.issue_number }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7b7e66f080..423b31b9fb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,28 +7,15 @@ env: BRANCH_NAME: ${{ github.event.ref.BRANCH_NAME }} jobs: - get_asdf_version: - runs-on: ubuntu-22.04 - outputs: - asdf_version: ${{ steps.asdf-version.outputs.version }} - tag_format: ${{ steps.load-config.outputs.TAG_FORMAT }} - steps: - - name: Checkout code - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd - - - name: Get asdf version - id: asdf-version - run: echo "version=$(awk '!/^#/ && NF {print $1; exit}' .tool-versions.asdf)" >> "$GITHUB_OUTPUT" - - name: Load config value - id: load-config - run: | - TAG_FORMAT=$(yq '.TAG_FORMAT' .github/config/settings.yml) - echo "TAG_FORMAT=$TAG_FORMAT" >> "$GITHUB_OUTPUT" + get_config_values: + uses: NHSDigital/eps-common-workflows/.github/workflows/get-repo-config.yml@5ac2707dd9cd60ad127275179495b9c890d74711 + with: + verify_published_from_main_image: true quality_checks: - uses: NHSDigital/eps-common-workflows/.github/workflows/quality-checks.yml@383f3f9eaf3cb553ebcd74897bfed4d5e387629e - needs: [get_asdf_version] + uses: NHSDigital/eps-common-workflows/.github/workflows/quality-checks-devcontainer.yml@5ac2707dd9cd60ad127275179495b9c890d74711 + needs: [get_config_values] with: - asdfVersion: ${{ needs.get_asdf_version.outputs.asdf_version }} + pinned_image: ${{ needs.get_config_values.outputs.pinned_image }} secrets: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} @@ -43,26 +30,34 @@ jobs: echo "commit_id=${{ github.sha }}" >> "$GITHUB_OUTPUT" tag_release: - needs: [quality_checks, get_commit_id, get_asdf_version] - uses: NHSDigital/eps-common-workflows/.github/workflows/tag-release.yml@383f3f9eaf3cb553ebcd74897bfed4d5e387629e + needs: [quality_checks, get_commit_id, get_config_values] + uses: NHSDigital/eps-common-workflows/.github/workflows/tag-release-devcontainer.yml@5ac2707dd9cd60ad127275179495b9c890d74711 + permissions: + id-token: write + contents: write with: dry_run: false - asdfVersion: ${{ needs.get_asdf_version.outputs.asdf_version }} + pinned_image: ${{ needs.get_config_values.outputs.pinned_image }} branch_name: main - tag_format: ${{ needs.get_asdf_version.outputs.tag_format }} - secrets: inherit - + tag_format: ${{ needs.get_config_values.outputs.tag_format }} + update_jira: true + jira_release_prefix: "cpt-ui" + secrets: + EXECUTE_JIRA_LAMBDA_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }} + package_code: - needs: [tag_release, get_commit_id] + needs: [tag_release, get_commit_id, get_config_values] uses: ./.github/workflows/cdk_package_code.yml with: VERSION_NUMBER: ${{needs.tag_release.outputs.version_tag}} COMMIT_ID: ${{needs.get_commit_id.outputs.commit_id}} + pinned_image: ${{ needs.get_config_values.outputs.pinned_image }} release_dev: - needs: [tag_release, package_code, get_commit_id] + needs: [tag_release, package_code, get_commit_id, get_config_values] uses: ./.github/workflows/release_all_stacks.yml with: + pinned_image: ${{ needs.get_config_values.outputs.pinned_image }} SERVICE_NAME: cpt-ui TARGET_ENVIRONMENT: dev VERSION_NUMBER: ${{needs.tag_release.outputs.version_tag}} @@ -93,18 +88,15 @@ jobs: ROUTE53_EXPORT_NAME: EPS REACT_LOG_LEVEL: "debug" LOG_RETENTION_IN_DAYS: 30 - CREATE_INT_RELEASE_NOTES: true - CREATE_PROD_RELEASE_NOTES: true - MARK_JIRA_RELEASED: false - CREATE_INT_RC_RELEASE_NOTES: false IS_PULL_REQUEST: false FORWARD_CSOC_LOGS: false secrets: inherit release_ref: - needs: [tag_release, package_code, get_commit_id, release_dev] + needs: [tag_release, package_code, get_commit_id, release_dev, get_config_values] uses: ./.github/workflows/release_all_stacks.yml with: + pinned_image: ${{ needs.get_config_values.outputs.pinned_image }} SERVICE_NAME: cpt-ui TARGET_ENVIRONMENT: ref VERSION_NUMBER: ${{needs.tag_release.outputs.version_tag}} @@ -140,9 +132,10 @@ jobs: secrets: inherit release_qa: - needs: [tag_release, package_code, get_commit_id, release_dev] + needs: [tag_release, package_code, get_commit_id, release_dev, get_config_values] uses: ./.github/workflows/release_all_stacks.yml with: + pinned_image: ${{ needs.get_config_values.outputs.pinned_image }} SERVICE_NAME: cpt-ui TARGET_ENVIRONMENT: qa VERSION_NUMBER: ${{needs.tag_release.outputs.version_tag}} @@ -177,9 +170,10 @@ jobs: FORWARD_CSOC_LOGS: false secrets: inherit release_int: - needs: [tag_release, package_code, get_commit_id, release_qa] + needs: [tag_release, package_code, get_commit_id, release_qa, get_config_values] uses: ./.github/workflows/release_all_stacks.yml with: + pinned_image: ${{ needs.get_config_values.outputs.pinned_image }} SERVICE_NAME: cpt-ui TARGET_ENVIRONMENT: int VERSION_NUMBER: ${{needs.tag_release.outputs.version_tag}} @@ -206,17 +200,14 @@ jobs: ROUTE53_EXPORT_NAME: CPT REACT_LOG_LEVEL: "debug" # change this before pilot LOG_RETENTION_IN_DAYS: 30 - CREATE_INT_RELEASE_NOTES: true - CREATE_PROD_RELEASE_NOTES: true - MARK_JIRA_RELEASED: false - CREATE_INT_RC_RELEASE_NOTES: true IS_PULL_REQUEST: false FORWARD_CSOC_LOGS: false secrets: inherit release_prod: - needs: [tag_release, package_code, get_commit_id, release_int] + needs: [tag_release, package_code, get_commit_id, release_int, get_config_values] uses: ./.github/workflows/release_all_stacks.yml with: + pinned_image: ${{ needs.get_config_values.outputs.pinned_image }} SERVICE_NAME: cpt-ui TARGET_ENVIRONMENT: prod VERSION_NUMBER: ${{needs.tag_release.outputs.version_tag}} @@ -243,10 +234,6 @@ jobs: ROUTE53_EXPORT_NAME: CPT REACT_LOG_LEVEL: "debug" # change this before pilot LOG_RETENTION_IN_DAYS: 731 - CREATE_INT_RELEASE_NOTES: true - CREATE_PROD_RELEASE_NOTES: true - MARK_JIRA_RELEASED: false - CREATE_INT_RC_RELEASE_NOTES: false IS_PULL_REQUEST: false FORWARD_CSOC_LOGS: true secrets: inherit diff --git a/.github/workflows/release_all_stacks.yml b/.github/workflows/release_all_stacks.yml index 0e8b356266..1e3afa130b 100644 --- a/.github/workflows/release_all_stacks.yml +++ b/.github/workflows/release_all_stacks.yml @@ -75,32 +75,34 @@ on: LOG_RETENTION_IN_DAYS: type: string required: true - CREATE_INT_RELEASE_NOTES: - type: boolean - default: false - CREATE_PROD_RELEASE_NOTES: - type: boolean - default: false - MARK_JIRA_RELEASED: - type: boolean - default: false - CREATE_INT_RC_RELEASE_NOTES: - type: boolean - default: false IS_PULL_REQUEST: type: boolean required: true FORWARD_CSOC_LOGS: type: boolean required: true + pinned_image: + required: true + type: string jobs: release_all_code: runs-on: ubuntu-22.04 environment: ${{ inputs.TARGET_ENVIRONMENT }} + container: + image: ${{ inputs.pinned_image }} + options: --user 1001:1001 --group-add 128 + defaults: + run: + shell: bash permissions: id-token: write contents: write + env: + AWS_MAX_ATTEMPTS: 20 steps: + - name: copy .tool-versions + run: | + cp /home/vscode/.tool-versions "$HOME/.tool-versions" - name: Checkout local github actions uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd with: @@ -109,24 +111,6 @@ jobs: sparse-checkout: | .github - - name: create_int_rc_release_notes - uses: ./.github/actions/update_confluence_jira - if: ${{ inputs.CREATE_INT_RC_RELEASE_NOTES == true }} - with: - TARGET_ENVIRONMENT: int - RELEASE_TAG: ${{ inputs.VERSION_NUMBER }} - CONFLUENCE_PAGE_ID: "899319592" - CREATE_RC_RELEASE_NOTES: true - DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE }} - TARGET_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.INT_CLOUD_FORMATION_CHECK_VERSION_ROLE }} - DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }} - - name: Configure AWS Credentials - id: connect_aws_pull_image - uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 - with: - aws-region: eu-west-2 - role-to-assume: ${{ secrets.CDK_PULL_IMAGE_ROLE }} - role-session-name: prescription-clinical-tracker-ui-pull-image - name: build_artifact download uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c with: @@ -137,20 +121,6 @@ jobs: mkdir -p .build tar -xf artifact.tar -C .build - - name: Retrieve AWS Account ID - id: retrieve_aws_account_id - run: echo "ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)" >> "$GITHUB_ENV" - - - name: Login to Amazon ECR - id: login_ecr - run: | - aws ecr get-login-password --region eu-west-2 | docker login --username AWS --password-stdin ${{ env.ACCOUNT_ID }}.dkr.ecr.eu-west-2.amazonaws.com - - - name: Pull cdk-utils-build from Amazon ECR - run: | - docker pull "${{ env.ACCOUNT_ID }}.dkr.ecr.eu-west-2.amazonaws.com/cdk-utils-build-repo:latest" - docker tag "${{ env.ACCOUNT_ID }}.dkr.ecr.eu-west-2.amazonaws.com/cdk-utils-build-repo:latest" cdk-utils-build-repo:latest - - name: Configure AWS Credentials id: connect_aws_for_deployment uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 @@ -162,8 +132,6 @@ jobs: - name: check redeploy stateful stack id: check_redeploy_stateful_stack - env: - AWS_MAX_ATTEMPTS: 20 run: | CF_LONDON_EXPORTS=$(aws cloudformation list-exports --region eu-west-2 --output json) CLOUDFRONT_DISTRIBUTION_ID=$(echo "$CF_LONDON_EXPORTS" | \ @@ -251,41 +219,20 @@ jobs: CLOUDFRONT_ORIGIN_CUSTOM_HEADER: ${{secrets.CLOUDFRONT_ORIGIN_CUSTOM_HEADER }} IS_PULL_REQUEST: ${{inputs.IS_PULL_REQUEST}} FORWARD_CSOC_LOGS: ${{ inputs.FORWARD_CSOC_LOGS }} - AWS_MAX_ATTEMPTS: 20 - - - name: Show diff for stateful stack - run: | - docker run \ - -v "$(pwd)/.build":/home/cdkuser/workspace/ \ - -e AWS_ACCESS_KEY_ID=${{ steps.connect_aws_for_deployment.outputs.aws-access-key-id }} \ - -e AWS_SECRET_ACCESS_KEY=${{ steps.connect_aws_for_deployment.outputs.aws-secret-access-key }} \ - -e AWS_SESSION_TOKEN=${{ steps.connect_aws_for_deployment.outputs.aws-session-token }} \ - -e AWS_REGION="eu-west-2" \ - -e SHOW_DIFF="true" \ - -e DEPLOY_CODE="false" \ - -e CONFIG_FILE_NAME="stateful_resources.json" \ - -e CDK_APP_PATH="packages/cdk/bin/StatefulResourcesApp.ts" \ - cdk-utils-build-repo:latest - shell: bash - name: Deploy for stateful stack run: | - docker run \ - -v "$(pwd)/.build":/home/cdkuser/workspace/ \ - -e AWS_ACCESS_KEY_ID=${{ steps.connect_aws_for_deployment.outputs.aws-access-key-id }} \ - -e AWS_SECRET_ACCESS_KEY=${{ steps.connect_aws_for_deployment.outputs.aws-secret-access-key }} \ - -e AWS_SESSION_TOKEN=${{ steps.connect_aws_for_deployment.outputs.aws-session-token }} \ - -e AWS_REGION="eu-west-2" \ - -e SHOW_DIFF="false" \ - -e DEPLOY_CODE="true" \ - -e CONFIG_FILE_NAME="stateful_resources.json" \ - -e CDK_APP_PATH="packages/cdk/bin/StatefulResourcesApp.ts" \ - cdk-utils-build-repo:latest + cd .build + npx cdk deploy \ + --app "npx ts-node --prefer-ts-exts packages/cdk/bin/StatefulResourcesApp.ts" \ + --all \ + --require-approval=never \ + --ci true shell: bash + env: + CONFIG_FILE_NAME: stateful_resources.json - name: Set Environment Variables for website deployment id: setup_env_website_deployment - env: - AWS_MAX_ATTEMPTS: 20 run: | CF_LONDON_EXPORTS=$(aws cloudformation list-exports --region eu-west-2 --output json) CF_US_EXPORTS=$(aws cloudformation list-exports --region us-east-1 --output json) @@ -340,8 +287,6 @@ jobs: make react-build - name: deploy website - env: - AWS_MAX_ATTEMPTS: 20 run: | staticBucketName=$(aws cloudformation list-exports --query "Exports[?Name=='${{ inputs.SERVICE_NAME }}-stateful-resources:StaticContentBucket:Name'].Value" --output text) aws s3 cp ".build/packages/staticContent/404.html" "s3://${staticBucketName}/404.html" @@ -393,41 +338,20 @@ jobs: CLOUDFRONT_ORIGIN_CUSTOM_HEADER: ${{secrets.CLOUDFRONT_ORIGIN_CUSTOM_HEADER }} IS_PULL_REQUEST: ${{inputs.IS_PULL_REQUEST}} FORWARD_CSOC_LOGS: ${{ inputs.FORWARD_CSOC_LOGS }} - AWS_MAX_ATTEMPTS: 20 - - - name: Show diff for stateless stack - run: | - docker run \ - -v "$(pwd)/.build":/home/cdkuser/workspace/ \ - -e AWS_ACCESS_KEY_ID=${{ steps.connect_aws_for_deployment.outputs.aws-access-key-id }} \ - -e AWS_SECRET_ACCESS_KEY=${{ steps.connect_aws_for_deployment.outputs.aws-secret-access-key }} \ - -e AWS_SESSION_TOKEN=${{ steps.connect_aws_for_deployment.outputs.aws-session-token }} \ - -e AWS_REGION="eu-west-2" \ - -e SHOW_DIFF="true" \ - -e DEPLOY_CODE="false" \ - -e CONFIG_FILE_NAME="stateless_resources.json" \ - -e CDK_APP_PATH="packages/cdk/bin/StatelessResourcesApp.ts" \ - cdk-utils-build-repo:latest - shell: bash - name: Deploy code for stateless stack run: | - docker run \ - -v "$(pwd)/.build":/home/cdkuser/workspace/ \ - -e AWS_ACCESS_KEY_ID=${{ steps.connect_aws_for_deployment.outputs.aws-access-key-id }} \ - -e AWS_SECRET_ACCESS_KEY=${{ steps.connect_aws_for_deployment.outputs.aws-secret-access-key }} \ - -e AWS_SESSION_TOKEN=${{ steps.connect_aws_for_deployment.outputs.aws-session-token }} \ - -e AWS_REGION="eu-west-2" \ - -e SHOW_DIFF="false" \ - -e DEPLOY_CODE="true" \ - -e CONFIG_FILE_NAME="stateless_resources.json" \ - -e CDK_APP_PATH="packages/cdk/bin/StatelessResourcesApp.ts" \ - cdk-utils-build-repo:latest + cd .build + npx cdk deploy \ + --app "npx ts-node --prefer-ts-exts packages/cdk/bin/StatelessResourcesApp.ts" \ + --all \ + --require-approval=never \ + --ci true shell: bash + env: + CONFIG_FILE_NAME: stateless_resources.json - name: update cloudfront kvs id: update_cloudfront_kvs - env: - AWS_MAX_ATTEMPTS: 20 shell: bash run: | # shellcheck disable=SC2140 @@ -524,68 +448,19 @@ jobs: CLOUDFRONT_ORIGIN_CUSTOM_HEADER: ${{secrets.CLOUDFRONT_ORIGIN_CUSTOM_HEADER }} IS_PULL_REQUEST: ${{inputs.IS_PULL_REQUEST}} FORWARD_CSOC_LOGS: ${{ inputs.FORWARD_CSOC_LOGS }} - AWS_MAX_ATTEMPTS: 20 - - - name: Show diff for stateful stack redeployment - if: ${{ steps.check_redeploy_stateful_stack.outputs.REDEPLOY_STATEFUL_STACK == 'true' }} - run: | - docker run \ - -v "$(pwd)/.build":/home/cdkuser/workspace/ \ - -e AWS_ACCESS_KEY_ID=${{ steps.connect_aws_for_deployment.outputs.aws-access-key-id }} \ - -e AWS_SECRET_ACCESS_KEY=${{ steps.connect_aws_for_deployment.outputs.aws-secret-access-key }} \ - -e AWS_SESSION_TOKEN=${{ steps.connect_aws_for_deployment.outputs.aws-session-token }} \ - -e AWS_REGION="eu-west-2" \ - -e SHOW_DIFF="true" \ - -e DEPLOY_CODE="false" \ - -e CONFIG_FILE_NAME="stateful_resources.json" \ - -e CDK_APP_PATH="packages/cdk/bin/StatefulResourcesApp.ts" \ - cdk-utils-build-repo:latest - shell: bash - name: Deploy code for stateful stack redeployment if: ${{ steps.check_redeploy_stateful_stack.outputs.REDEPLOY_STATEFUL_STACK == 'true' }} run: | - docker run \ - -v "$(pwd)/.build":/home/cdkuser/workspace/ \ - -e AWS_ACCESS_KEY_ID=${{ steps.connect_aws_for_deployment.outputs.aws-access-key-id }} \ - -e AWS_SECRET_ACCESS_KEY=${{ steps.connect_aws_for_deployment.outputs.aws-secret-access-key }} \ - -e AWS_SESSION_TOKEN=${{ steps.connect_aws_for_deployment.outputs.aws-session-token }} \ - -e AWS_REGION="eu-west-2" \ - -e SHOW_DIFF="false" \ - -e DEPLOY_CODE="true" \ - -e CONFIG_FILE_NAME="stateful_resources.json" \ - -e CDK_APP_PATH="packages/cdk/bin/StatefulResourcesApp.ts" \ - cdk-utils-build-repo:latest + cd .build + npx cdk deploy \ + --app "npx ts-node --prefer-ts-exts packages/cdk/bin/StatefulResourcesApp.ts" \ + --all \ + --require-approval=never \ + --ci true shell: bash - - - name: create_int_release_notes - uses: ./.github/actions/update_confluence_jira - if: ${{ inputs.CREATE_INT_RELEASE_NOTES == true && always() && !failure() && !cancelled() }} - with: - TARGET_ENVIRONMENT: int - CONFLUENCE_PAGE_ID: "899319595" - CREATE_RC_RELEASE_NOTES: false - DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE }} - TARGET_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.INT_CLOUD_FORMATION_CHECK_VERSION_ROLE }} - DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }} - - - name: create_prod_release_notes - uses: ./.github/actions/update_confluence_jira - if: ${{ inputs.CREATE_PROD_RELEASE_NOTES == true && always() && !failure() && !cancelled() }} - with: - TARGET_ENVIRONMENT: prod - CONFLUENCE_PAGE_ID: "899319597" - CREATE_RC_RELEASE_NOTES: false - DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_CHECK_VERSION_ROLE }} - TARGET_CLOUD_FORMATION_CHECK_VERSION_ROLE: ${{ secrets.PROD_CLOUD_FORMATION_CHECK_VERSION_ROLE }} - DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }} - - - name: mark_released_in_jira - uses: ./.github/actions/mark_jira_released - if: ${{ inputs.MARK_JIRA_RELEASED == true && always() && !failure() && !cancelled() }} - with: - RELEASE_TAG: ${{ inputs.VERSION_NUMBER }} - DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE: ${{ secrets.DEV_CLOUD_FORMATION_EXECUTE_LAMBDA_ROLE }} + env: + CONFIG_FILE_NAME: stateful_resources.json update_github_pages: runs-on: ubuntu-22.04 @@ -625,5 +500,6 @@ jobs: with: ENVIRONMENT: ${{ inputs.TARGET_ENVIRONMENT }} VERSION_NUMBER: ${{ inputs.VERSION_NUMBER }} + pinned_image: ${{ inputs.pinned_image }} secrets: REGRESSION_TESTS_PEM: ${{ secrets.REGRESSION_TESTS_PEM }} diff --git a/.github/workflows/run_regression_tests.yml b/.github/workflows/run_regression_tests.yml index 7afc9756e5..336ff4cd25 100644 --- a/.github/workflows/run_regression_tests.yml +++ b/.github/workflows/run_regression_tests.yml @@ -11,7 +11,9 @@ on: type: string REGRESSION_TESTS_PEM: type: string - default: false + pinned_image: + type: string + required: true secrets: REGRESSION_TESTS_PEM: required: true @@ -19,11 +21,20 @@ on: jobs: run_regression_tests: runs-on: ubuntu-22.04 + container: + image: ${{ inputs.pinned_image }} + options: --user 1001:1001 --group-add 128 + defaults: + run: + shell: bash permissions: id-token: write contents: write steps: + - name: copy .tool-versions + run: | + cp /home/vscode/.tool-versions "$HOME/.tool-versions" - name: Checkout local github actions uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd with: @@ -38,33 +49,6 @@ jobs: private-key: ${{ secrets.REGRESSION_TESTS_PEM }} owner: "NHSDigital" repositories: "electronic-prescription-service-api-regression-tests" - - - name: Get asdf version - id: asdf-version - run: echo "version=$(awk '!/^#/ && NF {print $1; exit}' .tool-versions.asdf)" >> "$GITHUB_OUTPUT" - - # using git commit sha for version of action to ensure we have stable version - - name: Install asdf - uses: asdf-vm/actions/setup@b7bcd026f18772e44fe1026d729e1611cc435d47 - with: - asdf_version: ${{ steps.asdf-version.outputs.version }} - - - name: Cache asdf - uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 - with: - path: | - ~/.asdf - key: ${{ runner.os }}-asdf-${{ hashFiles('**/.tool-versions') }}-${{ steps.asdf-version.outputs.version }} - restore-keys: | - ${{ runner.os }}-asdf-${{ hashFiles('**/.tool-versions') }}-${{ steps.asdf-version.outputs.version }} - - - name: Install asdf dependencies in .tool-versions - uses: asdf-vm/actions/install@b7bcd026f18772e44fe1026d729e1611cc435d47 - with: - asdf_version: ${{ steps.asdf-version.outputs.version }} - env: - PYTHON_CONFIGURE_OPTS: --enable-shared - - name: Run Regression Testing working-directory: scripts env: diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4d4eb95aba..d0dadd4845 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -201,7 +201,7 @@ repos: entry: bash args: - -c - - 'docker run -v "$LOCAL_WORKSPACE_FOLDER:/src" git-secrets --pre_commit_hook' + - 'git-secrets --pre_commit_hook' language: system fail_fast: true diff --git a/.tool-versions b/.tool-versions deleted file mode 100644 index d30d74554c..0000000000 --- a/.tool-versions +++ /dev/null @@ -1,7 +0,0 @@ -nodejs 24.12.0 -python 3.14.2 -poetry 2.2.1 -shellcheck 0.10.0 -direnv 2.32.2 -actionlint 1.7.3 -ruby 3.3.0 diff --git a/.tool-versions.asdf b/.tool-versions.asdf deleted file mode 100644 index 4921076f8e..0000000000 --- a/.tool-versions.asdf +++ /dev/null @@ -1,2 +0,0 @@ -# define the .asdf-version to use here -0.18.0 diff --git a/Makefile b/Makefile index 71b27b2589..c24df66311 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ guard-%: exit 1; \ fi -.PHONY: install build test publish release clean +.PHONY: install build test publish release clean lint compile cdk-synth cdk-deploy cdk-diff react-dev react-build react-start react-lint check-licenses cdk-synth-no-mock cdk-synth-mock cdk-synth-stateful-resources-no-mock cdk-synth-stateless-resources-no-mock cdk-synth-stateful-resources-mock cdk-synth-stateless-resources-mock install: install-node install-python install-hooks @@ -106,17 +106,6 @@ check-licenses-node: npm run check-licenses --workspace packages/testingSupport/clearActiveSessions npm run check-licenses --workspace packages/testingSupport/setLastActivityTime -check-licenses-python: - scripts/check_python_licenses.sh - -aws-configure: - aws configure sso --region eu-west-2 - -aws-login: - aws sso login --sso-session sso-session - -cfn-guard: - ./scripts/run_cfn_guard.sh react-dev: npm run dev --workspace packages/cpt-ui @@ -352,5 +341,5 @@ cdk-diff: guard-CDK_APP_NAME --context VERSION_NUMBER=$$VERSION_NUMBER \ --context COMMIT_ID=$$COMMIT_ID -build-deployment-container-image: - docker build -t "clinical-prescription-tracker-ui" -f docker/Dockerfile . +%: + @$(MAKE) -f /usr/local/share/eps/Mk/common.mk $@ diff --git a/package-lock.json b/package-lock.json index 7086fa1262..c0d1a827e8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,7 +57,7 @@ "ts-jest": "^29.4.6", "ts-node": "^10.9.2", "typescript": "^5.9.3", - "typescript-eslint": "^8.57.0", + "typescript-eslint": "^8.57.1", "vitest": "^4.0.18" } }, @@ -427,21 +427,25 @@ } }, "node_modules/@aws-lambda-powertools/commons": { - "version": "2.31.0", + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/commons/-/commons-2.32.0.tgz", + "integrity": "sha512-vsdakJDZu/KkJ5+1WHkawQ5R06aCK0XYB3nc3tpcBfO1YmOHkn+QpuGiZtkmpzIykGPAO9lnBjK5joAeim2o4A==", "license": "MIT-0", "dependencies": { - "@aws/lambda-invoke-store": "0.2.3" + "@aws/lambda-invoke-store": "0.2.4" } }, "node_modules/@aws-lambda-powertools/logger": { - "version": "2.31.0", + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/logger/-/logger-2.32.0.tgz", + "integrity": "sha512-ZfomsMv4FnxYkgUvU9S6BPrTzd+ntPiIBZcrvSNz+/aPvVwu2BGHSKDuVlXa7nr6rB1wjzaA5bmLVTESIdnsdQ==", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "2.31.0", - "@aws/lambda-invoke-store": "0.2.3" + "@aws-lambda-powertools/commons": "2.32.0", + "@aws/lambda-invoke-store": "0.2.4" }, "peerDependencies": { - "@aws-lambda-powertools/jmespath": "2.31.0", + "@aws-lambda-powertools/jmespath": "2.32.0", "@middy/core": "4.x || 5.x || 6.x || 7.x" }, "peerDependenciesMeta": { @@ -454,10 +458,12 @@ } }, "node_modules/@aws-lambda-powertools/parameters": { - "version": "2.31.0", + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/@aws-lambda-powertools/parameters/-/parameters-2.32.0.tgz", + "integrity": "sha512-Fnr7AqWPOSvHQU6xlOQwmdafr24FWLHGFtQQJYw1ltVT3wW1z4JJSKZLOqLh2Me2zcUddpAxaJ9bB1MJ4Zabmw==", "license": "MIT-0", "dependencies": { - "@aws-lambda-powertools/commons": "2.31.0" + "@aws-lambda-powertools/commons": "2.32.0" }, "peerDependencies": { "@aws-sdk/client-appconfigdata": ">=3.x", @@ -489,47 +495,47 @@ } }, "node_modules/@aws-sdk/client-dynamodb": { - "version": "3.1009.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.1009.0.tgz", - "integrity": "sha512-2QYVDbPQpVWxXzeVo94NYwv12K5r1+7Bm4IgG/4TuU03nxgXqdlODWv7VPQeYE+a6cCMWxlEoeWAdX6SJ/lx6A==", + "version": "3.1014.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.1014.0.tgz", + "integrity": "sha512-AFqO74mg9UITN+H5CdK7ULwPrvty6mlbDT2kwY3HI/piI6DjiwA7Y7wKWtJAFjCa1OLyRRV2/jy1DKBb80Qv8Q==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.20", - "@aws-sdk/credential-provider-node": "^3.972.21", - "@aws-sdk/dynamodb-codec": "^3.972.21", + "@aws-sdk/core": "^3.973.23", + "@aws-sdk/credential-provider-node": "^3.972.24", + "@aws-sdk/dynamodb-codec": "^3.972.24", "@aws-sdk/middleware-endpoint-discovery": "^3.972.8", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.8", - "@aws-sdk/middleware-user-agent": "^3.972.21", - "@aws-sdk/region-config-resolver": "^3.972.8", + "@aws-sdk/middleware-user-agent": "^3.972.24", + "@aws-sdk/region-config-resolver": "^3.972.9", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.7", - "@smithy/config-resolver": "^4.4.11", - "@smithy/core": "^3.23.11", + "@aws-sdk/util-user-agent-node": "^3.973.10", + "@smithy/config-resolver": "^4.4.13", + "@smithy/core": "^3.23.12", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", - "@smithy/middleware-endpoint": "^4.4.25", - "@smithy/middleware-retry": "^4.4.42", - "@smithy/middleware-serde": "^4.2.14", + "@smithy/middleware-endpoint": "^4.4.27", + "@smithy/middleware-retry": "^4.4.44", + "@smithy/middleware-serde": "^4.2.15", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", - "@smithy/node-http-handler": "^4.4.16", + "@smithy/node-http-handler": "^4.5.0", "@smithy/protocol-http": "^5.3.12", - "@smithy/smithy-client": "^4.12.5", + "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.41", - "@smithy/util-defaults-mode-node": "^4.2.44", + "@smithy/util-defaults-mode-browser": "^4.3.43", + "@smithy/util-defaults-mode-node": "^4.2.47", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", @@ -750,26 +756,26 @@ } }, "node_modules/@aws-sdk/client-lambda": { - "version": "3.1009.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.1009.0.tgz", - "integrity": "sha512-n1CyQBkifss91yIFXbUgdz2aZToPL7GkxvRMzmHYfn+7oLhVkhC1hME4lAZTZkbnAFHhkYSMocM3ahKDL0FEJg==", + "version": "3.1014.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.1014.0.tgz", + "integrity": "sha512-PWcGDKHbTZdOin7kmJuDJR8TgvBQVQy4FQy/RNrKql6nGz26HvHSbUp5Um2KvMPSaiAfPSUXbmbJDN6fYBScBQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.20", - "@aws-sdk/credential-provider-node": "^3.972.21", + "@aws-sdk/core": "^3.973.23", + "@aws-sdk/credential-provider-node": "^3.972.24", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.8", - "@aws-sdk/middleware-user-agent": "^3.972.21", - "@aws-sdk/region-config-resolver": "^3.972.8", + "@aws-sdk/middleware-user-agent": "^3.972.24", + "@aws-sdk/region-config-resolver": "^3.972.9", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.7", - "@smithy/config-resolver": "^4.4.11", - "@smithy/core": "^3.23.11", + "@aws-sdk/util-user-agent-node": "^3.973.10", + "@smithy/config-resolver": "^4.4.13", + "@smithy/core": "^3.23.12", "@smithy/eventstream-serde-browser": "^4.2.12", "@smithy/eventstream-serde-config-resolver": "^4.3.12", "@smithy/eventstream-serde-node": "^4.2.12", @@ -777,25 +783,25 @@ "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", - "@smithy/middleware-endpoint": "^4.4.25", - "@smithy/middleware-retry": "^4.4.42", - "@smithy/middleware-serde": "^4.2.14", + "@smithy/middleware-endpoint": "^4.4.27", + "@smithy/middleware-retry": "^4.4.44", + "@smithy/middleware-serde": "^4.2.15", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", - "@smithy/node-http-handler": "^4.4.16", + "@smithy/node-http-handler": "^4.5.0", "@smithy/protocol-http": "^5.3.12", - "@smithy/smithy-client": "^4.12.5", + "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.41", - "@smithy/util-defaults-mode-node": "^4.2.44", + "@smithy/util-defaults-mode-browser": "^4.3.43", + "@smithy/util-defaults-mode-node": "^4.2.47", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", - "@smithy/util-stream": "^4.5.19", + "@smithy/util-stream": "^4.5.20", "@smithy/util-utf8": "^4.2.2", "@smithy/util-waiter": "^4.2.13", "tslib": "^2.6.2" @@ -1006,19 +1012,19 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.973.20", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.20.tgz", - "integrity": "sha512-i3GuX+lowD892F3IuJf8o6AbyDupMTdyTxQrCJGcn71ni5hTZ82L4nQhcdumxZ7XPJRJJVHS/CR3uYOIIs0PVA==", + "version": "3.973.23", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.23.tgz", + "integrity": "sha512-aoJncvD1XvloZ9JLnKqTRL9dBy+Szkryoag9VT+V1TqsuUgIxV9cnBVM/hrDi2vE8bDqLiDR8nirdRcCdtJu0w==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.6", - "@aws-sdk/xml-builder": "^3.972.11", - "@smithy/core": "^3.23.11", + "@aws-sdk/xml-builder": "^3.972.15", + "@smithy/core": "^3.23.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/signature-v4": "^5.3.12", - "@smithy/smithy-client": "^4.12.5", + "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.12", @@ -1066,12 +1072,12 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.972.18", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.18.tgz", - "integrity": "sha512-X0B8AlQY507i5DwjLByeU2Af4ARsl9Vr84koDcXCbAkplmU+1xBFWxEPrWRAoh56waBne/yJqEloSwvRf4x6XA==", + "version": "3.972.21", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.21.tgz", + "integrity": "sha512-BkAfKq8Bd4shCtec1usNz//urPJF/SZy14qJyxkSaRJQ/Vv1gVh0VZSTmS7aE6aLMELkFV5wHHrS9ZcdG8Kxsg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.20", + "@aws-sdk/core": "^3.973.23", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/types": "^4.13.1", @@ -1107,20 +1113,20 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.972.20", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.20.tgz", - "integrity": "sha512-ey9Lelj001+oOfrbKmS6R2CJAiXX7QKY4Vj9VJv6L2eE6/VjD8DocHIoYqztTm70xDLR4E1jYPTKfIui+eRNDA==", + "version": "3.972.23", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.23.tgz", + "integrity": "sha512-4XZ3+Gu5DY8/n8zQFHBgcKTF7hWQl42G6CY9xfXVo2d25FM/lYkpmuzhYopYoPL1ITWkJ2OSBQfYEu5JRfHOhA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.20", + "@aws-sdk/core": "^3.973.23", "@aws-sdk/types": "^3.973.6", "@smithy/fetch-http-handler": "^5.3.15", - "@smithy/node-http-handler": "^4.4.16", + "@smithy/node-http-handler": "^4.5.0", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", - "@smithy/smithy-client": "^4.12.5", + "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", - "@smithy/util-stream": "^4.5.19", + "@smithy/util-stream": "^4.5.20", "tslib": "^2.6.2" }, "engines": { @@ -1153,19 +1159,19 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.972.20", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.20.tgz", - "integrity": "sha512-5flXSnKHMloObNF+9N0cupKegnH1Z37cdVlpETVgx8/rAhCe+VNlkcZH3HDg2SDn9bI765S+rhNPXGDJJPfbtA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.973.20", - "@aws-sdk/credential-provider-env": "^3.972.18", - "@aws-sdk/credential-provider-http": "^3.972.20", - "@aws-sdk/credential-provider-login": "^3.972.20", - "@aws-sdk/credential-provider-process": "^3.972.18", - "@aws-sdk/credential-provider-sso": "^3.972.20", - "@aws-sdk/credential-provider-web-identity": "^3.972.20", - "@aws-sdk/nested-clients": "^3.996.10", + "version": "3.972.23", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.23.tgz", + "integrity": "sha512-PZLSmU0JFpNCDFReidBezsgL5ji9jOBry8CnZdw4Jj6d0K2z3Ftnp44NXgADqYx5BLMu/ZHujfeJReaDoV+IwQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.23", + "@aws-sdk/credential-provider-env": "^3.972.21", + "@aws-sdk/credential-provider-http": "^3.972.23", + "@aws-sdk/credential-provider-login": "^3.972.23", + "@aws-sdk/credential-provider-process": "^3.972.21", + "@aws-sdk/credential-provider-sso": "^3.972.23", + "@aws-sdk/credential-provider-web-identity": "^3.972.23", + "@aws-sdk/nested-clients": "^3.996.13", "@aws-sdk/types": "^3.973.6", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/property-provider": "^4.2.12", @@ -1203,13 +1209,13 @@ } }, "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.972.20", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.20.tgz", - "integrity": "sha512-gEWo54nfqp2jABMu6HNsjVC4hDLpg9HC8IKSJnp0kqWtxIJYHTmiLSsIfI4ScQjxEwpB+jOOH8dOLax1+hy/Hw==", + "version": "3.972.23", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.23.tgz", + "integrity": "sha512-OmE/pSkbMM3dCj1HdOnZ5kXnKK+R/Yz+kbBugraBecp0pGAs21eEURfQRz+1N2gzIHLVyGIP1MEjk/uSrFsngg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.20", - "@aws-sdk/nested-clients": "^3.996.10", + "@aws-sdk/core": "^3.973.23", + "@aws-sdk/nested-clients": "^3.996.13", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/protocol-http": "^5.3.12", @@ -1247,17 +1253,17 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.972.21", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.21.tgz", - "integrity": "sha512-hah8if3/B/Q+LBYN5FukyQ1Mym6PLPDsBOBsIgNEYD6wLyZg0UmUF/OKIVC3nX9XH8TfTPuITK+7N/jenVACWA==", + "version": "3.972.24", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.24.tgz", + "integrity": "sha512-9Jwi7aps3AfUicJyF5udYadPypPpCwUZ6BSKr/QjRbVCpRVS1wc+1Q6AEZ/qz8J4JraeRd247pSzyMQSIHVebw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "^3.972.18", - "@aws-sdk/credential-provider-http": "^3.972.20", - "@aws-sdk/credential-provider-ini": "^3.972.20", - "@aws-sdk/credential-provider-process": "^3.972.18", - "@aws-sdk/credential-provider-sso": "^3.972.20", - "@aws-sdk/credential-provider-web-identity": "^3.972.20", + "@aws-sdk/credential-provider-env": "^3.972.21", + "@aws-sdk/credential-provider-http": "^3.972.23", + "@aws-sdk/credential-provider-ini": "^3.972.23", + "@aws-sdk/credential-provider-process": "^3.972.21", + "@aws-sdk/credential-provider-sso": "^3.972.23", + "@aws-sdk/credential-provider-web-identity": "^3.972.23", "@aws-sdk/types": "^3.973.6", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/property-provider": "^4.2.12", @@ -1295,12 +1301,12 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.972.18", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.18.tgz", - "integrity": "sha512-Tpl7SRaPoOLT32jbTWchPsn52hYYgJ0kpiFgnwk8pxTANQdUymVSZkzFvv1+oOgZm1CrbQUP9MBeoMZ9IzLZjA==", + "version": "3.972.21", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.21.tgz", + "integrity": "sha512-nRxbeOJ1E1gVA0lNQezuMVndx+ZcuyaW/RB05pUsznN5BxykSlH6KkZ/7Ca/ubJf3i5N3p0gwNO5zgPSCzj+ww==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.20", + "@aws-sdk/core": "^3.973.23", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", @@ -1337,14 +1343,14 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.972.20", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.20.tgz", - "integrity": "sha512-p+R+PYR5Z7Gjqf/6pvbCnzEHcqPCpLzR7Yf127HjJ6EAb4hUcD+qsNRnuww1sB/RmSeCLxyay8FMyqREw4p1RA==", + "version": "3.972.23", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.23.tgz", + "integrity": "sha512-APUccADuYPLL0f2htpM8Z4czabSmHOdo4r41W6lKEZdy++cNJ42Radqy6x4TopENzr3hR6WYMyhiuiqtbf/nAA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.20", - "@aws-sdk/nested-clients": "^3.996.10", - "@aws-sdk/token-providers": "3.1009.0", + "@aws-sdk/core": "^3.973.23", + "@aws-sdk/nested-clients": "^3.996.13", + "@aws-sdk/token-providers": "3.1014.0", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", @@ -1381,13 +1387,13 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.972.20", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.20.tgz", - "integrity": "sha512-rWCmh8o7QY4CsUj63qopzMzkDq/yPpkrpb+CnjBEFSOg/02T/we7sSTVg4QsDiVS9uwZ8VyONhq98qt+pIh3KA==", + "version": "3.972.23", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.23.tgz", + "integrity": "sha512-H5JNqtIwOu/feInmMMWcK0dL5r897ReEn7n2m16Dd0DPD9gA2Hg8Cq4UDzZ/9OzaLh/uqBM6seixz0U6Fi2Eag==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.20", - "@aws-sdk/nested-clients": "^3.996.10", + "@aws-sdk/core": "^3.973.23", + "@aws-sdk/nested-clients": "^3.996.13", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", @@ -1424,14 +1430,14 @@ } }, "node_modules/@aws-sdk/dynamodb-codec": { - "version": "3.972.21", - "resolved": "https://registry.npmjs.org/@aws-sdk/dynamodb-codec/-/dynamodb-codec-3.972.21.tgz", - "integrity": "sha512-6wsIKQWJx87F1SZyQ/SfV7ovdvP0R2l5vpgSxT1+b9Qmx2IYnvWNNJfmpd3HJRN7aokEh/IV/eFlVnsZF2NXCQ==", + "version": "3.972.24", + "resolved": "https://registry.npmjs.org/@aws-sdk/dynamodb-codec/-/dynamodb-codec-3.972.24.tgz", + "integrity": "sha512-J4qDdBAV8Gq87B2jnX1y4brRlnlta2lIZma7HfQDlkNYo7abSWF0n8quzK9a0wG7UOMfBDzL5jP+1lt3ufggOQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.20", - "@smithy/core": "^3.23.11", - "@smithy/smithy-client": "^4.12.5", + "@aws-sdk/core": "^3.973.23", + "@smithy/core": "^3.23.12", + "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" @@ -1660,15 +1666,15 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.972.21", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.21.tgz", - "integrity": "sha512-62XRl1GDYPpkt7cx1AX1SPy9wgNE9Iw/NPuurJu4lmhCWS7sGKO+kS53TQ8eRmIxy3skmvNInnk0ZbWrU5Dpyg==", + "version": "3.972.24", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.24.tgz", + "integrity": "sha512-dLTWy6IfAMhNiSEvMr07g/qZ54be6pLqlxVblbF6AzafmmGAzMMj8qMoY9B4+YgT+gY9IcuxZslNh03L6PyMCQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.20", + "@aws-sdk/core": "^3.973.23", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", - "@smithy/core": "^3.23.11", + "@smithy/core": "^3.23.12", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "@smithy/util-retry": "^4.2.12", @@ -1704,44 +1710,44 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.996.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.996.10.tgz", - "integrity": "sha512-SlDol5Z+C7Ivnc2rKGqiqfSUmUZzY1qHfVs9myt/nxVwswgfpjdKahyTzLTx802Zfq0NFRs7AejwKzzzl5Co2w==", + "version": "3.996.13", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.996.13.tgz", + "integrity": "sha512-ptZ1HF4yYHNJX8cgFF+8NdYO69XJKZn7ft0/ynV3c0hCbN+89fAbrLS+fqniU2tW8o9Kfqhj8FUh+IPXb2Qsuw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.20", + "@aws-sdk/core": "^3.973.23", "@aws-sdk/middleware-host-header": "^3.972.8", "@aws-sdk/middleware-logger": "^3.972.8", "@aws-sdk/middleware-recursion-detection": "^3.972.8", - "@aws-sdk/middleware-user-agent": "^3.972.21", - "@aws-sdk/region-config-resolver": "^3.972.8", + "@aws-sdk/middleware-user-agent": "^3.972.24", + "@aws-sdk/region-config-resolver": "^3.972.9", "@aws-sdk/types": "^3.973.6", "@aws-sdk/util-endpoints": "^3.996.5", "@aws-sdk/util-user-agent-browser": "^3.972.8", - "@aws-sdk/util-user-agent-node": "^3.973.7", - "@smithy/config-resolver": "^4.4.11", - "@smithy/core": "^3.23.11", + "@aws-sdk/util-user-agent-node": "^3.973.10", + "@smithy/config-resolver": "^4.4.13", + "@smithy/core": "^3.23.12", "@smithy/fetch-http-handler": "^5.3.15", "@smithy/hash-node": "^4.2.12", "@smithy/invalid-dependency": "^4.2.12", "@smithy/middleware-content-length": "^4.2.12", - "@smithy/middleware-endpoint": "^4.4.25", - "@smithy/middleware-retry": "^4.4.42", - "@smithy/middleware-serde": "^4.2.14", + "@smithy/middleware-endpoint": "^4.4.27", + "@smithy/middleware-retry": "^4.4.44", + "@smithy/middleware-serde": "^4.2.15", "@smithy/middleware-stack": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", - "@smithy/node-http-handler": "^4.4.16", + "@smithy/node-http-handler": "^4.5.0", "@smithy/protocol-http": "^5.3.12", - "@smithy/smithy-client": "^4.12.5", + "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "@smithy/url-parser": "^4.2.12", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.41", - "@smithy/util-defaults-mode-node": "^4.2.44", + "@smithy/util-defaults-mode-browser": "^4.3.43", + "@smithy/util-defaults-mode-node": "^4.2.47", "@smithy/util-endpoints": "^3.3.3", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", @@ -1824,13 +1830,13 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.972.8", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.8.tgz", - "integrity": "sha512-1eD4uhTDeambO/PNIDVG19A6+v4NdD7xzwLHDutHsUqz0B+i661MwQB2eYO4/crcCvCiQG4SRm1k81k54FEIvw==", + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.9.tgz", + "integrity": "sha512-eQ+dFU05ZRC/lC2XpYlYSPlXtX3VT8sn5toxN2Fv7EXlMoA2p9V7vUBKqHunfD4TRLpxUq8Y8Ol/nCqiv327Ng==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.6", - "@smithy/config-resolver": "^4.4.11", + "@smithy/config-resolver": "^4.4.13", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" @@ -1865,13 +1871,13 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.1009.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1009.0.tgz", - "integrity": "sha512-KCPLuTqN9u0Rr38Arln78fRG9KXpzsPWmof+PZzfAHMMQq2QED6YjQrkrfiH7PDefLWEposY1o4/eGwrmKA4JA==", + "version": "3.1014.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1014.0.tgz", + "integrity": "sha512-gHTHNUoaOGNrSWkl32A7wFsU78jlNTlqMccLu0byUk5CysYYXaxNMIonIVr4YcykC7vgtDS5ABuz83giy6fzJA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.20", - "@aws-sdk/nested-clients": "^3.996.10", + "@aws-sdk/core": "^3.973.23", + "@aws-sdk/nested-clients": "^3.996.13", "@aws-sdk/types": "^3.973.6", "@smithy/property-provider": "^4.2.12", "@smithy/shared-ini-file-loader": "^4.4.7", @@ -2040,12 +2046,12 @@ } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.973.7", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.7.tgz", - "integrity": "sha512-Hz6EZMUAEzqUd7e+vZ9LE7mn+5gMbxltXy18v+YSFY+9LBJz15wkNZvw5JqfX3z0FS9n3bgUtz3L5rAsfh4YlA==", + "version": "3.973.10", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.10.tgz", + "integrity": "sha512-E99zeTscCc+pTMfsvnfi6foPpKmdD1cZfOC7/P8UUrjsoQdg9VEWPRD+xdFduKnfPXwcvby58AlO9jwwF6U96g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "^3.972.21", + "@aws-sdk/middleware-user-agent": "^3.972.24", "@aws-sdk/types": "^3.973.6", "@smithy/node-config-provider": "^4.3.12", "@smithy/types": "^4.13.1", @@ -2097,13 +2103,13 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.11.tgz", - "integrity": "sha512-iitV/gZKQMvY9d7ovmyFnFuTHbBAtrmLnvaSb/3X8vOKyevwtpmEtyc8AdhVWZe0pI/1GsHxlEvQeOePFzy7KQ==", + "version": "3.972.15", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.15.tgz", + "integrity": "sha512-PxMRlCFNiQnke9YR29vjFQwz4jq+6Q04rOVFeTDR2K7Qpv9h9FOWOxG+zJjageimYbWqE3bTuLjmryWHAWbvaA==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", - "fast-xml-parser": "5.4.1", + "fast-xml-parser": "5.5.8", "tslib": "^2.6.2" }, "engines": { @@ -2123,7 +2129,9 @@ } }, "node_modules/@aws/lambda-invoke-store": { - "version": "0.2.3", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz", + "integrity": "sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==", "license": "Apache-2.0", "engines": { "node": ">=18.0.0" @@ -4264,12 +4272,12 @@ } }, "node_modules/@middy/core": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/@middy/core/-/core-7.1.7.tgz", - "integrity": "sha512-EkHykvCg+VvqSVowxbpCGdu1M5WBYo1RFkRvPYU8j59oUgItWkOhk1fuKsZSGmzdELpBHHYxku99VoVwNJHYUA==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@middy/core/-/core-7.2.1.tgz", + "integrity": "sha512-KFtxLUhHQcBezrusBt5F2VKYY/p3Po2rM2OByyeZsqpzSY9D8iapsmJGaiHFgXbfuEUS5B0BxTXixFcxjChLUg==", "license": "MIT", "dependencies": { - "@middy/util": "7.1.7" + "@middy/util": "7.2.1" }, "engines": { "node": ">=22" @@ -4288,9 +4296,9 @@ } }, "node_modules/@middy/core/node_modules/@middy/util": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/@middy/util/-/util-7.1.7.tgz", - "integrity": "sha512-lHTBRlZNivUuKBR9M4xeIrhuEXxOJym6XAi8VE4p+SMZDgkNt4mjm7INyu5Xc/J5CxDdu295QbPYhTAUlzl5Bw==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@middy/util/-/util-7.2.1.tgz", + "integrity": "sha512-vwtRPxQ5stQFR8Ulfsuqt8GgPJX6iXrF/9SiOTsJzw2nliNu/aPcZ8DR6sPj+gFar/QdUJuym6iyjevfeMNiFA==", "license": "MIT", "engines": { "node": ">=22" @@ -4301,9 +4309,9 @@ } }, "node_modules/@middy/http-header-normalizer": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/@middy/http-header-normalizer/-/http-header-normalizer-7.1.6.tgz", - "integrity": "sha512-ASgyKiX9iqr555H3K6gFlzkvYmgafIHd3vnhXXLmkcCNpJBdpeMH3Hn1INk3WiyNLXvT4Vp/pETSkWWEBx9Bdg==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@middy/http-header-normalizer/-/http-header-normalizer-7.2.1.tgz", + "integrity": "sha512-dCne3FMDbdMzhYt4MEOoIHm8R47N0ooPNdU1JleeReWZtp7u54VbMET0C16GChVmbdCVFk/4IxDtM2nY+IHx1w==", "license": "MIT", "engines": { "node": ">=22" @@ -5157,9 +5165,9 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "4.4.11", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.11.tgz", - "integrity": "sha512-YxFiiG4YDAtX7WMN7RuhHZLeTmRRAOyCbr+zB8e3AQzHPnUhS8zXjB1+cniPVQI3xbWsQPM0X2aaIkO/ME0ymw==", + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.13.tgz", + "integrity": "sha512-iIzMC5NmOUP6WL6o8iPBjFhUhBZ9pPjpUpQYWMUFQqKyXXzOftbfK8zcQCz/jFV1Psmf05BK5ypx4K2r4Tnwdg==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.3.12", @@ -5186,9 +5194,9 @@ } }, "node_modules/@smithy/core": { - "version": "3.23.11", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.11.tgz", - "integrity": "sha512-952rGf7hBRnhUIaeLp6q4MptKW8sPFe5VvkoZ5qIzFAtx6c/QZ/54FS3yootsyUSf9gJX/NBqEBNdNR7jMIlpQ==", + "version": "3.23.12", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.12.tgz", + "integrity": "sha512-o9VycsYNtgC+Dy3I0yrwCqv9CWicDnke0L7EVOrZtJpjb2t0EjaEofmMrYc0T1Kn3yk32zm6cspxF9u9Bj7e5w==", "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^5.3.12", @@ -5197,7 +5205,7 @@ "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-middleware": "^4.2.12", - "@smithy/util-stream": "^4.5.19", + "@smithy/util-stream": "^4.5.20", "@smithy/util-utf8": "^4.2.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" @@ -5550,13 +5558,13 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.4.25", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.25.tgz", - "integrity": "sha512-dqjLwZs2eBxIUG6Qtw8/YZ4DvzHGIf0DA18wrgtfP6a50UIO7e2nY0FPdcbv5tVJKqWCCU5BmGMOUwT7Puan+A==", + "version": "4.4.27", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.27.tgz", + "integrity": "sha512-T3TFfUgXQlpcg+UdzcAISdZpj4Z+XECZ/cefgA6wLBd6V4lRi0svN2hBouN/be9dXQ31X4sLWz3fAQDf+nt6BA==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.23.11", - "@smithy/middleware-serde": "^4.2.14", + "@smithy/core": "^3.23.12", + "@smithy/middleware-serde": "^4.2.15", "@smithy/node-config-provider": "^4.3.12", "@smithy/shared-ini-file-loader": "^4.4.7", "@smithy/types": "^4.13.1", @@ -5581,15 +5589,15 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.4.42", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.42.tgz", - "integrity": "sha512-vbwyqHRIpIZutNXZpLAozakzamcINaRCpEy1MYmK6xBeW3xN+TyPRA123GjXnuxZIjc9848MRRCugVMTXxC4Eg==", + "version": "4.4.44", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.44.tgz", + "integrity": "sha512-Y1Rav7m5CFRPQyM4CI0koD/bXjyjJu3EQxZZhtLGD88WIrBrQ7kqXM96ncd6rYnojwOo/u9MXu57JrEvu/nLrA==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.3.12", "@smithy/protocol-http": "^5.3.12", "@smithy/service-error-classification": "^4.2.12", - "@smithy/smithy-client": "^4.12.5", + "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "@smithy/util-middleware": "^4.2.12", "@smithy/util-retry": "^4.2.12", @@ -5613,12 +5621,12 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.14.tgz", - "integrity": "sha512-+CcaLoLa5apzSRtloOyG7lQvkUw2ZDml3hRh4QiG9WyEPfW5Ke/3tPOPiPjUneuT59Tpn8+c3RVaUvvkkwqZwg==", + "version": "4.2.15", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.15.tgz", + "integrity": "sha512-ExYhcltZSli0pgAKOpQQe1DLFBLryeZ22605y/YS+mQpdNWekum9Ujb/jMKfJKgjtz1AZldtwA/wCYuKJgjjlg==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.23.11", + "@smithy/core": "^3.23.12", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" @@ -5692,9 +5700,9 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "4.4.16", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.16.tgz", - "integrity": "sha512-ULC8UCS/HivdCB3jhi+kLFYe4B5gxH2gi9vHBfEIiRrT2jfKiZNiETJSlzRtE6B26XbBHjPtc8iZKSNqMol9bw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.5.0.tgz", + "integrity": "sha512-Rnq9vQWiR1+/I6NZZMNzJHV6pZYyEHt2ZnuV3MG8z2NNenC4i/8Kzttz7CjZiHSmsN5frhXhg17z3Zqjjhmz1A==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^4.2.12", @@ -5926,17 +5934,17 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.12.5", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.5.tgz", - "integrity": "sha512-UqwYawyqSr/aog8mnLnfbPurS0gi4G7IYDcD28cUIBhsvWs1+rQcL2IwkUQ+QZ7dibaoRzhNF99fAQ9AUcO00w==", + "version": "4.12.7", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.7.tgz", + "integrity": "sha512-q3gqnwml60G44FECaEEsdQMplYhDMZYCtYhMCzadCnRnnHIobZJjegmdoUo6ieLQlPUzvrMdIJUpx6DoPmzANQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.23.11", - "@smithy/middleware-endpoint": "^4.4.25", + "@smithy/core": "^3.23.12", + "@smithy/middleware-endpoint": "^4.4.27", "@smithy/middleware-stack": "^4.2.12", "@smithy/protocol-http": "^5.3.12", "@smithy/types": "^4.13.1", - "@smithy/util-stream": "^4.5.19", + "@smithy/util-stream": "^4.5.20", "tslib": "^2.6.2" }, "engines": { @@ -6056,13 +6064,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.41", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.41.tgz", - "integrity": "sha512-M1w1Ux0rSVvBOxIIiqbxvZvhnjQ+VUjJrugtORE90BbadSTH+jsQL279KRL3Hv0w69rE7EuYkV/4Lepz/NBW9g==", + "version": "4.3.43", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.43.tgz", + "integrity": "sha512-Qd/0wCKMaXxev/z00TvNzGCH2jlKKKxXP1aDxB6oKwSQthe3Og2dMhSayGCnsma1bK/kQX1+X7SMP99t6FgiiQ==", "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^4.2.12", - "@smithy/smithy-client": "^4.12.5", + "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" }, @@ -6083,16 +6091,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.44", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.44.tgz", - "integrity": "sha512-YPze3/lD1KmWuZsl9JlfhcgGLX7AXhSoaCDtiPntUjNW5/YY0lOHjkcgxyE9x/h5vvS1fzDifMGjzqnNlNiqOQ==", + "version": "4.2.47", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.47.tgz", + "integrity": "sha512-qSRbYp1EQ7th+sPFuVcVO05AE0QH635hycdEXlpzIahqHHf2Fyd/Zl+8v0XYMJ3cgDVPa0lkMefU7oNUjAP+DQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^4.4.11", + "@smithy/config-resolver": "^4.4.13", "@smithy/credential-provider-imds": "^4.2.12", "@smithy/node-config-provider": "^4.3.12", "@smithy/property-provider": "^4.2.12", - "@smithy/smithy-client": "^4.12.5", + "@smithy/smithy-client": "^4.12.7", "@smithy/types": "^4.13.1", "tslib": "^2.6.2" }, @@ -6200,13 +6208,13 @@ } }, "node_modules/@smithy/util-stream": { - "version": "4.5.19", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.19.tgz", - "integrity": "sha512-v4sa+3xTweL1CLO2UP0p7tvIMH/Rq1X4KKOxd568mpe6LSLMQCnDHs4uv7m3ukpl3HvcN2JH6jiCS0SNRXKP/w==", + "version": "4.5.20", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.20.tgz", + "integrity": "sha512-4yXLm5n/B5SRBR2p8cZ90Sbv4zL4NKsgxdzCzp/83cXw2KxLEumt5p+GAVyRNZgQOSrzXn9ARpO0lUe8XSlSDw==", "license": "Apache-2.0", "dependencies": { "@smithy/fetch-http-handler": "^5.3.15", - "@smithy/node-http-handler": "^4.4.16", + "@smithy/node-http-handler": "^4.5.0", "@smithy/types": "^4.13.1", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", @@ -6232,6 +6240,8 @@ }, "node_modules/@smithy/util-stream/node_modules/@smithy/util-hex-encoding": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.2.tgz", + "integrity": "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6242,6 +6252,8 @@ }, "node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz", + "integrity": "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==", "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -6949,17 +6961,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.0.tgz", - "integrity": "sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.1.tgz", + "integrity": "sha512-Gn3aqnvNl4NGc6x3/Bqk1AOn0thyTU9bqDRhiRnUWezgvr2OnhYCWCgC8zXXRVqBsIL1pSDt7T9nJUe0oM0kDQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.57.0", - "@typescript-eslint/type-utils": "8.57.0", - "@typescript-eslint/utils": "8.57.0", - "@typescript-eslint/visitor-keys": "8.57.0", + "@typescript-eslint/scope-manager": "8.57.1", + "@typescript-eslint/type-utils": "8.57.1", + "@typescript-eslint/utils": "8.57.1", + "@typescript-eslint/visitor-keys": "8.57.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" @@ -6972,22 +6984,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.57.0", + "@typescript-eslint/parser": "^8.57.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.0.tgz", - "integrity": "sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.1.tgz", + "integrity": "sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.57.0", - "@typescript-eslint/types": "8.57.0", - "@typescript-eslint/typescript-estree": "8.57.0", - "@typescript-eslint/visitor-keys": "8.57.0", + "@typescript-eslint/scope-manager": "8.57.1", + "@typescript-eslint/types": "8.57.1", + "@typescript-eslint/typescript-estree": "8.57.1", + "@typescript-eslint/visitor-keys": "8.57.1", "debug": "^4.4.3" }, "engines": { @@ -7003,14 +7015,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.0.tgz", - "integrity": "sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.1.tgz", + "integrity": "sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.57.0", - "@typescript-eslint/types": "^8.57.0", + "@typescript-eslint/tsconfig-utils": "^8.57.1", + "@typescript-eslint/types": "^8.57.1", "debug": "^4.4.3" }, "engines": { @@ -7025,14 +7037,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.0.tgz", - "integrity": "sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.1.tgz", + "integrity": "sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.0", - "@typescript-eslint/visitor-keys": "8.57.0" + "@typescript-eslint/types": "8.57.1", + "@typescript-eslint/visitor-keys": "8.57.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7043,9 +7055,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.0.tgz", - "integrity": "sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.1.tgz", + "integrity": "sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg==", "dev": true, "license": "MIT", "engines": { @@ -7060,15 +7072,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.0.tgz", - "integrity": "sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.1.tgz", + "integrity": "sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.0", - "@typescript-eslint/typescript-estree": "8.57.0", - "@typescript-eslint/utils": "8.57.0", + "@typescript-eslint/types": "8.57.1", + "@typescript-eslint/typescript-estree": "8.57.1", + "@typescript-eslint/utils": "8.57.1", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, @@ -7085,9 +7097,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.0.tgz", - "integrity": "sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.1.tgz", + "integrity": "sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==", "dev": true, "license": "MIT", "engines": { @@ -7099,16 +7111,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.0.tgz", - "integrity": "sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.1.tgz", + "integrity": "sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.57.0", - "@typescript-eslint/tsconfig-utils": "8.57.0", - "@typescript-eslint/types": "8.57.0", - "@typescript-eslint/visitor-keys": "8.57.0", + "@typescript-eslint/project-service": "8.57.1", + "@typescript-eslint/tsconfig-utils": "8.57.1", + "@typescript-eslint/types": "8.57.1", + "@typescript-eslint/visitor-keys": "8.57.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -7166,16 +7178,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.0.tgz", - "integrity": "sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.1.tgz", + "integrity": "sha512-XUNSJ/lEVFttPMMoDVA2r2bwrl8/oPx8cURtczkSEswY5T3AeLmCy+EKWQNdL4u0MmAHOjcWrqJp2cdvgjn8dQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.57.0", - "@typescript-eslint/types": "8.57.0", - "@typescript-eslint/typescript-estree": "8.57.0" + "@typescript-eslint/scope-manager": "8.57.1", + "@typescript-eslint/types": "8.57.1", + "@typescript-eslint/typescript-estree": "8.57.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7190,13 +7202,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.0.tgz", - "integrity": "sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.1.tgz", + "integrity": "sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.0", + "@typescript-eslint/types": "8.57.1", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -8017,9 +8029,9 @@ } }, "node_modules/aws-cdk": { - "version": "2.1111.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.1111.0.tgz", - "integrity": "sha512-69AVF04cxbAhYzmeJYtUF5bs6ruNnH05EQZJfjadk5Lpg+HVaJY2NjG/2qgsMmKrfRgvLet73Ir8ehVlAaaGng==", + "version": "2.1112.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.1112.0.tgz", + "integrity": "sha512-IYUbsd9tpBQRqEO2evWsG+p2ZNa6wG5/sJvmWaqo45V1ep8BW+mrf+jEpFLD9uDPXqRA57EZGVGils7QLbOhNA==", "dev": true, "license": "Apache-2.0", "bin": { @@ -8030,9 +8042,9 @@ } }, "node_modules/aws-cdk-lib": { - "version": "2.243.0", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.243.0.tgz", - "integrity": "sha512-qIhg/3gSNeZ9LoVmDATO45HPk+POkoCfPZRezeOPhd2kAJ/wzYswyUcMqpDWXrlRrEVYntxsykQs+2eMA04Isg==", + "version": "2.244.0", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.244.0.tgz", + "integrity": "sha512-j5FVeZv5W+v6j6OnW8RjoN04T+8pYvDJJV7yXhhj4IiGDKPgMH3fflQLQXJousd2QQk+nSAjghDVJcrZ4GFyGA==", "bundleDependencies": [ "@balena/dockerignore", "@aws-cdk/cloud-assembly-api", @@ -10274,17 +10286,24 @@ "license": "BSD-3-Clause" }, "node_modules/fast-xml-builder": { - "version": "1.0.0", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.1.4.tgz", + "integrity": "sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" } ], - "license": "MIT" + "license": "MIT", + "dependencies": { + "path-expression-matcher": "^1.1.3" + } }, "node_modules/fast-xml-parser": { - "version": "5.4.1", + "version": "5.5.8", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.5.8.tgz", + "integrity": "sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ==", "funding": [ { "type": "github", @@ -10293,8 +10312,9 @@ ], "license": "MIT", "dependencies": { - "fast-xml-builder": "^1.0.0", - "strnum": "^2.1.2" + "fast-xml-builder": "^1.1.4", + "path-expression-matcher": "^1.2.0", + "strnum": "^2.2.0" }, "bin": { "fxparser": "src/cli/cli.js" @@ -10433,7 +10453,9 @@ } }, "node_modules/flatted": { - "version": "3.3.3", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true, "license": "ISC" }, @@ -13802,6 +13824,21 @@ "node": ">=8" } }, + "node_modules/path-expression-matcher": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.2.0.tgz", + "integrity": "sha512-DwmPWeFn+tq7TiyJ2CxezCAirXjFxvaiD03npak3cRjlP9+OjTmSy1EpIrEbh+l6JgUundniloMLDQ/6VTdhLQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "dev": true, @@ -15264,7 +15301,9 @@ } }, "node_modules/strnum": { - "version": "2.1.2", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.1.tgz", + "integrity": "sha512-BwRvNd5/QoAtyW1na1y1LsJGQNvRlkde6Q/ipqqEaivoMdV+B1OMOTVdwR+N/cwVUcIt9PYyHmV8HyexCZSupg==", "funding": [ { "type": "github", @@ -15751,16 +15790,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.57.0.tgz", - "integrity": "sha512-W8GcigEMEeB07xEZol8oJ26rigm3+bfPHxHvwbYUlu1fUDsGuQ7Hiskx5xGW/xM4USc9Ephe3jtv7ZYPQntHeA==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.57.1.tgz", + "integrity": "sha512-fLvZWf+cAGw3tqMCYzGIU6yR8K+Y9NT2z23RwOjlNFF2HwSB3KhdEFI5lSBv8tNmFkkBShSjsCjzx1vahZfISA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.57.0", - "@typescript-eslint/parser": "8.57.0", - "@typescript-eslint/typescript-estree": "8.57.0", - "@typescript-eslint/utils": "8.57.0" + "@typescript-eslint/eslint-plugin": "8.57.1", + "@typescript-eslint/parser": "8.57.1", + "@typescript-eslint/typescript-estree": "8.57.1", + "@typescript-eslint/utils": "8.57.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -16654,12 +16693,12 @@ "packages/cdk": { "version": "0.1.0", "dependencies": { - "aws-cdk-lib": "^2.243.0", + "aws-cdk-lib": "^2.244.0", "cdk-nag": "^2.37.55", "constructs": "^10.4.5" }, "devDependencies": { - "aws-cdk": "^2.1111.0" + "aws-cdk": "^2.1112.0" } }, "packages/CIS2SignOutLambda": { @@ -16667,14 +16706,14 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", - "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-lambda-powertools/logger": "^2.32.0", + "@aws-sdk/client-dynamodb": "^3.1014.0", "@aws-sdk/lib-dynamodb": "^3.1009.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", - "@middy/core": "^7.1.7", - "@middy/http-header-normalizer": "^7.1.6", + "@middy/core": "^7.2.1", + "@middy/http-header-normalizer": "^7.2.1", "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7" }, @@ -16699,16 +16738,16 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", - "@aws-lambda-powertools/parameters": "^2.31.0", - "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-lambda-powertools/logger": "^2.32.0", + "@aws-lambda-powertools/parameters": "^2.32.0", + "@aws-sdk/client-dynamodb": "^3.1014.0", "@aws-sdk/client-secrets-manager": "^3.1004.0", "@aws-sdk/lib-dynamodb": "^3.1009.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", "@cpt-ui-common/lambdaUtils": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", - "@middy/core": "^7.1.7", + "@middy/core": "^7.2.1", "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", "axios": "^1.13.6", @@ -16727,18 +16766,18 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", - "@aws-lambda-powertools/parameters": "^2.31.0", + "@aws-lambda-powertools/logger": "^2.32.0", + "@aws-lambda-powertools/parameters": "^2.32.0", "@aws-sdk/client-secrets-manager": "^3.1004.0", "@aws-sdk/lib-dynamodb": "^3.1009.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", - "@middy/core": "^7.1.7", + "@middy/core": "^7.2.1", "aws-lambda": "^1.0.7", "jsonwebtoken": "^9.0.3", "jwks-rsa": "^4.0.1" }, "devDependencies": { - "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-sdk/client-dynamodb": "^3.1014.0", "axios": "^1.13.6", "mock-jwks": "^3.3.5" } @@ -16754,7 +16793,7 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-lambda-powertools/logger": "^2.32.0", "@aws-sdk/client-secrets-manager": "^3.1004.0", "axios": "^1.13.6", "axios-retry": "^4.5.0" @@ -16769,7 +16808,7 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-lambda-powertools/logger": "^2.32.0", "@aws-sdk/lib-dynamodb": "^3.1009.0", "@cpt-ui-common/common-types": "^1.0.0" } @@ -16779,7 +16818,7 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-lambda-powertools/logger": "^2.32.0", "@cpt-ui-common/common-types": "^1.0.0", "aws-lambda": "^1.0.7", "axios": "^1.13.6" @@ -16790,11 +16829,11 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0" + "@aws-lambda-powertools/logger": "^2.32.0" }, "devDependencies": { "@cpt-ui-common/testing": "^1.0.0", - "@middy/core": "^7.1.7" + "@middy/core": "^7.2.1" } }, "packages/common/pdsClient": { @@ -16802,7 +16841,7 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-lambda-powertools/logger": "^2.32.0", "@cpt-ui-common/common-types": "^1.0.0", "@cpt-ui-common/lambdaUtils": "^1.0.0", "ajv": "^8.18.0", @@ -16839,7 +16878,7 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0" + "@aws-lambda-powertools/logger": "^2.32.0" }, "devDependencies": { "@cpt-ui-common/common-types": "^1.0.0", @@ -16907,15 +16946,15 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", - "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-lambda-powertools/logger": "^2.32.0", + "@aws-sdk/client-dynamodb": "^3.1014.0", "@aws-sdk/lib-dynamodb": "^3.1009.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/lambdaUtils": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", "@cpt-ui-common/pdsClient": "^1.0.0", - "@middy/core": "^7.1.7", - "@middy/http-header-normalizer": "^7.1.6", + "@middy/core": "^7.2.1", + "@middy/http-header-normalizer": "^7.2.1", "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", "axios": "^1.13.6" @@ -16930,11 +16969,11 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/commons": "^2.31.0", - "@aws-lambda-powertools/logger": "^2.31.0", - "@aws-lambda-powertools/parameters": "^2.31.0", - "@aws-sdk/client-dynamodb": "^3.995.0", - "@aws-sdk/client-lambda": "^3.1009.0", + "@aws-lambda-powertools/commons": "^2.32.0", + "@aws-lambda-powertools/logger": "^2.32.0", + "@aws-lambda-powertools/parameters": "^2.32.0", + "@aws-sdk/client-dynamodb": "^3.1014.0", + "@aws-sdk/client-lambda": "^3.1014.0", "@aws-sdk/client-secrets-manager": "^3.1004.0", "@aws-sdk/lib-dynamodb": "^3.1009.0", "@cpt-ui-common/authFunctions": "^1.0.0", @@ -16943,7 +16982,7 @@ "@cpt-ui-common/lambdaUtils": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", "@cpt-ui-common/pdsClient": "^1.0.0", - "@middy/core": "^7.1.7", + "@middy/core": "^7.2.1", "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", "axios": "^1.13.6", @@ -16964,15 +17003,15 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", - "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-lambda-powertools/logger": "^2.32.0", + "@aws-sdk/client-dynamodb": "^3.1014.0", "@aws-sdk/lib-dynamodb": "^3.1009.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/lambdaUtils": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", "@cpt-ui-common/pdsClient": "^1.0.0", - "@middy/core": "^7.1.7", - "@middy/http-header-normalizer": "^7.1.6", + "@middy/core": "^7.2.1", + "@middy/http-header-normalizer": "^7.2.1", "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", "axios": "^1.13.6" @@ -16989,14 +17028,14 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", - "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-lambda-powertools/logger": "^2.32.0", + "@aws-sdk/client-dynamodb": "^3.1014.0", "@aws-sdk/lib-dynamodb": "^3.1009.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", - "@middy/core": "^7.1.7", - "@middy/http-header-normalizer": "^7.1.6", + "@middy/core": "^7.2.1", + "@middy/http-header-normalizer": "^7.2.1", "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7" }, @@ -17009,10 +17048,10 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/commons": "^2.31.0", - "@aws-lambda-powertools/logger": "^2.31.0", - "@aws-lambda-powertools/parameters": "^2.31.0", - "@middy/core": "^7.1.7", + "@aws-lambda-powertools/commons": "^2.32.0", + "@aws-lambda-powertools/logger": "^2.32.0", + "@aws-lambda-powertools/parameters": "^2.32.0", + "@middy/core": "^7.2.1", "@middy/input-output-logger": "^7.1.1" }, "devDependencies": { @@ -17025,14 +17064,14 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", - "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-lambda-powertools/logger": "^2.32.0", + "@aws-sdk/client-dynamodb": "^3.1014.0", "@aws-sdk/lib-dynamodb": "^3.1009.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", - "@middy/core": "^7.1.7", - "@middy/http-header-normalizer": "^7.1.6", + "@middy/core": "^7.2.1", + "@middy/http-header-normalizer": "^7.2.1", "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", "axios": "^1.13.6", @@ -17047,14 +17086,14 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", - "@aws-sdk/client-dynamodb": "^3.990.0", + "@aws-lambda-powertools/logger": "^2.32.0", + "@aws-sdk/client-dynamodb": "^3.1014.0", "@aws-sdk/lib-dynamodb": "^3.1009.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", - "@middy/core": "^7.1.7", - "@middy/http-header-normalizer": "^7.1.6", + "@middy/core": "^7.2.1", + "@middy/http-header-normalizer": "^7.2.1", "@middy/input-output-logger": "^7.0.2", "aws-lambda": "^1.0.7", "axios": "^1.13.5", @@ -17069,14 +17108,14 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", - "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-lambda-powertools/logger": "^2.32.0", + "@aws-sdk/client-dynamodb": "^3.1014.0", "@aws-sdk/lib-dynamodb": "^3.1009.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", - "@middy/core": "^7.1.7", - "@middy/http-header-normalizer": "^7.1.6", + "@middy/core": "^7.2.1", + "@middy/http-header-normalizer": "^7.2.1", "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", "axios": "^1.13.6", diff --git a/package.json b/package.json index aea477fda3..d3d30287a0 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "ts-jest": "^29.4.6", "ts-node": "^10.9.2", "typescript": "^5.9.3", - "typescript-eslint": "^8.57.0", + "typescript-eslint": "^8.57.1", "vitest": "^4.0.18" }, "dependencies": { diff --git a/packages/CIS2SignOutLambda/package.json b/packages/CIS2SignOutLambda/package.json index de825ed167..ddeb276d02 100644 --- a/packages/CIS2SignOutLambda/package.json +++ b/packages/CIS2SignOutLambda/package.json @@ -13,14 +13,14 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", - "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-lambda-powertools/logger": "^2.32.0", + "@aws-sdk/client-dynamodb": "^3.1014.0", "@aws-sdk/lib-dynamodb": "^3.1009.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", - "@middy/core": "^7.1.7", - "@middy/http-header-normalizer": "^7.1.6", + "@middy/core": "^7.2.1", + "@middy/http-header-normalizer": "^7.2.1", "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7" }, diff --git a/packages/cdk/package.json b/packages/cdk/package.json index fd9ebde609..c342020958 100644 --- a/packages/cdk/package.json +++ b/packages/cdk/package.json @@ -7,11 +7,11 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "aws-cdk-lib": "^2.243.0", + "aws-cdk-lib": "^2.244.0", "cdk-nag": "^2.37.55", "constructs": "^10.4.5" }, "devDependencies": { - "aws-cdk": "^2.1111.0" + "aws-cdk": "^2.1112.0" } } diff --git a/packages/cognito/package.json b/packages/cognito/package.json index 46fb83d5db..71365c92a6 100644 --- a/packages/cognito/package.json +++ b/packages/cognito/package.json @@ -13,16 +13,16 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", - "@aws-lambda-powertools/parameters": "^2.31.0", - "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-lambda-powertools/logger": "^2.32.0", + "@aws-lambda-powertools/parameters": "^2.32.0", + "@aws-sdk/client-dynamodb": "^3.1014.0", "@aws-sdk/client-secrets-manager": "^3.1004.0", "@aws-sdk/lib-dynamodb": "^3.1009.0", "@cpt-ui-common/authFunctions": "^1.0.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", "@cpt-ui-common/lambdaUtils": "^1.0.0", "@cpt-ui-common/middyErrorHandler": "^1.0.0", - "@middy/core": "^7.1.7", + "@middy/core": "^7.2.1", "@middy/input-output-logger": "^7.1.1", "aws-lambda": "^1.0.7", "axios": "^1.13.6", diff --git a/packages/common/authFunctions/package.json b/packages/common/authFunctions/package.json index b7f81ff92d..e6068aa8b9 100644 --- a/packages/common/authFunctions/package.json +++ b/packages/common/authFunctions/package.json @@ -13,17 +13,17 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "devDependencies": { - "@aws-sdk/client-dynamodb": "^3.995.0", + "@aws-sdk/client-dynamodb": "^3.1014.0", "axios": "^1.13.6", "mock-jwks": "^3.3.5" }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", - "@aws-lambda-powertools/parameters": "^2.31.0", + "@aws-lambda-powertools/logger": "^2.32.0", + "@aws-lambda-powertools/parameters": "^2.32.0", "@aws-sdk/client-secrets-manager": "^3.1004.0", "@aws-sdk/lib-dynamodb": "^3.1009.0", "@cpt-ui-common/dynamoFunctions": "^1.0.0", - "@middy/core": "^7.1.7", + "@middy/core": "^7.2.1", "aws-lambda": "^1.0.7", "jsonwebtoken": "^9.0.3", "jwks-rsa": "^4.0.1" diff --git a/packages/common/doHSClient/package.json b/packages/common/doHSClient/package.json index b2ab570ae3..ca16784788 100644 --- a/packages/common/doHSClient/package.json +++ b/packages/common/doHSClient/package.json @@ -13,7 +13,7 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-lambda-powertools/logger": "^2.32.0", "@aws-sdk/client-secrets-manager": "^3.1004.0", "axios": "^1.13.6", "axios-retry": "^4.5.0" diff --git a/packages/common/dynamoFunctions/package.json b/packages/common/dynamoFunctions/package.json index c7f383f170..453ec5a1ee 100644 --- a/packages/common/dynamoFunctions/package.json +++ b/packages/common/dynamoFunctions/package.json @@ -13,7 +13,7 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-lambda-powertools/logger": "^2.32.0", "@aws-sdk/lib-dynamodb": "^3.1009.0", "@cpt-ui-common/common-types": "^1.0.0" } diff --git a/packages/common/lambdaUtils/package.json b/packages/common/lambdaUtils/package.json index 3f69f5c038..fdce393d37 100644 --- a/packages/common/lambdaUtils/package.json +++ b/packages/common/lambdaUtils/package.json @@ -14,7 +14,7 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-lambda-powertools/logger": "^2.32.0", "@cpt-ui-common/common-types": "^1.0.0", "aws-lambda": "^1.0.7", "axios": "^1.13.6" diff --git a/packages/common/middyErrorHandler/package.json b/packages/common/middyErrorHandler/package.json index 3a88a2eff8..a836fa4259 100644 --- a/packages/common/middyErrorHandler/package.json +++ b/packages/common/middyErrorHandler/package.json @@ -14,10 +14,10 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0" + "@aws-lambda-powertools/logger": "^2.32.0" }, "devDependencies": { - "@middy/core": "^7.1.7", + "@middy/core": "^7.2.1", "@cpt-ui-common/testing": "^1.0.0" } } diff --git a/packages/common/pdsClient/package.json b/packages/common/pdsClient/package.json index c684ae67b3..add0f8df41 100644 --- a/packages/common/pdsClient/package.json +++ b/packages/common/pdsClient/package.json @@ -14,7 +14,7 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0", + "@aws-lambda-powertools/logger": "^2.32.0", "@cpt-ui-common/common-types": "^1.0.0", "@cpt-ui-common/lambdaUtils": "^1.0.0", "ajv": "^8.18.0", diff --git a/packages/common/testing/package.json b/packages/common/testing/package.json index 5799d6a08c..75ed791a6b 100644 --- a/packages/common/testing/package.json +++ b/packages/common/testing/package.json @@ -14,7 +14,7 @@ "check-licenses": "license-checker --failOn GPL --failOn LGPL --start ../.." }, "dependencies": { - "@aws-lambda-powertools/logger": "^2.31.0" + "@aws-lambda-powertools/logger": "^2.32.0" }, "devDependencies": { "@cpt-ui-common/common-types": "^1.0.0", diff --git a/packages/cpt-ui/src/components/EpsRoleSelectionPage.tsx b/packages/cpt-ui/src/components/EpsRoleSelectionPage.tsx index 57a5ca3392..d75576ccfe 100644 --- a/packages/cpt-ui/src/components/EpsRoleSelectionPage.tsx +++ b/packages/cpt-ui/src/components/EpsRoleSelectionPage.tsx @@ -253,6 +253,15 @@ export default function RoleSelectionPage({ useEffect(() => { if (auth.hasSingleRoleAccess() && auth.isSignedIn) { + logger.debug("Role confirmed", { + sessionId: auth.sessionId, + pageName: location.pathname, + userId: auth.userDetails?.sub, + roleName: auth.selectedRole?.role_name, + roleId: auth.selectedRole?.role_id, + orgName: auth.selectedRole?.org_name, + orgCode: auth.selectedRole?.org_code + }, true) navigate(FRONTEND_PATHS.SEARCH_BY_PRESCRIPTION_ID) } }, [auth.hasSingleRoleAccess, auth.isSignedIn]) diff --git a/packages/cpt-ui/src/pages/YourSelectedRolePage.tsx b/packages/cpt-ui/src/pages/YourSelectedRolePage.tsx index 6748b5c24b..00f9796fea 100644 --- a/packages/cpt-ui/src/pages/YourSelectedRolePage.tsx +++ b/packages/cpt-ui/src/pages/YourSelectedRolePage.tsx @@ -6,16 +6,18 @@ import { Row, SummaryList } from "nhsuk-react-components" -import {Link} from "react-router-dom" +import {Link, useNavigate} from "react-router-dom" import {YOUR_SELECTED_ROLE_STRINGS} from "@/constants/ui-strings/YourSelectedRoleStrings" import {useAuth} from "@/context/AuthProvider" import {Button} from "@/components/ReactRouterButton" import {FRONTEND_PATHS} from "@/constants/environment" import {usePageTitle} from "@/hooks/usePageTitle" +import {logger} from "@/helpers/logger" export default function YourSelectedRolePage() { - const {selectedRole} = useAuth() + const {selectedRole, sessionId, userDetails} = useAuth() + const navigate = useNavigate() usePageTitle(YOUR_SELECTED_ROLE_STRINGS.pageTitle) const [roleName, setRoleName] = useState(YOUR_SELECTED_ROLE_STRINGS.noRoleName) @@ -36,6 +38,19 @@ export default function YourSelectedRolePage() { setOdsCode(selectedRole.org_code || YOUR_SELECTED_ROLE_STRINGS.noODSCode) }, [selectedRole]) + const onConfirmRole = () => { + logger.debug("Role confirmed", { + sessionId: sessionId, + pageName: location.pathname, + userId: userDetails?.sub, + roleName: selectedRole?.role_name, + roleId: selectedRole?.role_id, + orgName: selectedRole?.org_name, + orgCode: selectedRole?.org_code + }, true) + navigate(FRONTEND_PATHS.SEARCH_BY_PRESCRIPTION_ID) + } + const { heading, subheading, @@ -113,7 +128,7 @@ export default function YourSelectedRolePage() {