diff --git a/.gitattributes b/.gitattributes index 82ba0e95..a3feebc2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5,18 +5,11 @@ /.gitattributes linguist-generated /.github/pull_request_template.md linguist-generated /.github/workflows/build.yml linguist-generated -/.github/workflows/pull-request-lint.yml linguist-generated -/.github/workflows/release-v1.yml linguist-generated /.github/workflows/release.yml linguist-generated -/.github/workflows/stale.yml linguist-generated /.github/workflows/upgrade-master.yml linguist-generated /.github/workflows/upgrade-projen-master.yml linguist-generated -/.github/workflows/upgrade-projen-v1.yml linguist-generated -/.github/workflows/upgrade-v1.yml linguist-generated /.gitignore linguist-generated -/.mergify.yml linguist-generated /.npmignore linguist-generated -/.npmrc linguist-generated /.projen/** linguist-generated /.projen/deps.json linguist-generated /.projen/files.json linguist-generated diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 75691f04..c88f105a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,7 +22,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v3 with: - node-version: 16.x + node-version: 18.x - name: Install dependencies run: yarn install --check-files - name: build @@ -91,7 +91,7 @@ jobs: steps: - uses: actions/setup-node@v3 with: - node-version: 16.x + node-version: 18.x - name: Download build artifacts uses: actions/download-artifact@v3 with: @@ -116,7 +116,7 @@ jobs: steps: - uses: actions/setup-node@v3 with: - node-version: 16.x + node-version: 18.x - uses: actions/setup-python@v4 with: python-version: 3.x @@ -144,7 +144,7 @@ jobs: steps: - uses: actions/setup-node@v3 with: - node-version: 16.x + node-version: 18.x - uses: actions/setup-dotnet@v3 with: dotnet-version: 3.x diff --git a/.github/workflows/pull-request-lint.yml b/.github/workflows/pull-request-lint.yml deleted file mode 100644 index d1c14125..00000000 --- a/.github/workflows/pull-request-lint.yml +++ /dev/null @@ -1,32 +0,0 @@ -# ~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen". - -name: pull-request-lint -on: - pull_request_target: - types: - - labeled - - opened - - synchronize - - reopened - - ready_for_review - - edited -jobs: - validate: - name: Validate PR title - runs-on: ubuntu-latest - permissions: - pull-requests: write - steps: - - uses: amannn/action-semantic-pull-request@v5.0.2 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - types: |- - chore - docs - feat - fix - ci - refactor - test - requireScope: false diff --git a/.github/workflows/release-v1.yml b/.github/workflows/release-v1.yml deleted file mode 100644 index d3e3bef9..00000000 --- a/.github/workflows/release-v1.yml +++ /dev/null @@ -1,178 +0,0 @@ -# ~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen". - -name: release-v1 -on: - push: - branches: - - v1 - workflow_dispatch: {} -jobs: - release: - runs-on: ubuntu-latest - permissions: - contents: write - outputs: - latest_commit: ${{ steps.git_remote.outputs.latest_commit }} - env: - CI: "true" - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - name: Set git identity - run: |- - git config user.name "github-actions" - git config user.email "github-actions@github.com" - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 16.x - - name: Install dependencies - run: yarn install --check-files --frozen-lockfile - - name: release:v1 - run: npx projen release:v1 - - name: Check for new commits - id: git_remote - run: echo "latest_commit=$(git ls-remote origin -h ${{ github.ref }} | cut -f1)" >> $GITHUB_OUTPUT - - name: Backup artifact permissions - if: ${{ steps.git_remote.outputs.latest_commit == github.sha }} - run: cd dist && getfacl -R . > permissions-backup.acl - continue-on-error: true - - name: Upload artifact - if: ${{ steps.git_remote.outputs.latest_commit == github.sha }} - uses: actions/upload-artifact@v3 - with: - name: build-artifact - path: dist - release_github: - name: Publish to GitHub Releases - needs: release - runs-on: ubuntu-latest - permissions: - contents: write - if: needs.release.outputs.latest_commit == github.sha - steps: - - uses: actions/setup-node@v3 - with: - node-version: 16.x - - name: Download build artifacts - uses: actions/download-artifact@v3 - with: - name: build-artifact - path: dist - - name: Restore build artifact permissions - run: cd dist && setfacl --restore=permissions-backup.acl - continue-on-error: true - - name: Prepare Repository - run: mv dist .repo - - name: Collect GitHub Metadata - run: mv .repo/dist dist - - name: Release - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GITHUB_REPOSITORY: ${{ github.repository }} - GITHUB_REF: ${{ github.ref }} - run: errout=$(mktemp); gh release create $(cat dist/releasetag.txt) -R $GITHUB_REPOSITORY -F dist/changelog.md -t $(cat dist/releasetag.txt) --target $GITHUB_REF 2> $errout && true; exitcode=$?; if [ $exitcode -ne 0 ] && ! grep -q "Release.tag_name already exists" $errout; then cat $errout; exit $exitcode; fi - release_npm: - name: Publish to npm - needs: release - runs-on: ubuntu-latest - permissions: - contents: read - if: needs.release.outputs.latest_commit == github.sha - steps: - - uses: actions/setup-node@v3 - with: - node-version: 16.x - - name: Download build artifacts - uses: actions/download-artifact@v3 - with: - name: build-artifact - path: dist - - name: Restore build artifact permissions - run: cd dist && setfacl --restore=permissions-backup.acl - continue-on-error: true - - name: Prepare Repository - run: mv dist .repo - - name: Install Dependencies - run: cd .repo && yarn install --check-files --frozen-lockfile - - name: Create js artifact - run: cd .repo && npx projen package:js - - name: Collect js Artifact - run: mv .repo/dist dist - - name: Release - env: - NPM_DIST_TAG: latest - NPM_REGISTRY: registry.npmjs.org - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - run: npx -p publib@latest publib-npm - release_pypi: - name: Publish to PyPI - needs: release - runs-on: ubuntu-latest - permissions: - contents: read - if: needs.release.outputs.latest_commit == github.sha - steps: - - uses: actions/setup-node@v3 - with: - node-version: 16.x - - uses: actions/setup-python@v4 - with: - python-version: 3.x - - name: Download build artifacts - uses: actions/download-artifact@v3 - with: - name: build-artifact - path: dist - - name: Restore build artifact permissions - run: cd dist && setfacl --restore=permissions-backup.acl - continue-on-error: true - - name: Prepare Repository - run: mv dist .repo - - name: Install Dependencies - run: cd .repo && yarn install --check-files --frozen-lockfile - - name: Create python artifact - run: cd .repo && npx projen package:python - - name: Collect python Artifact - run: mv .repo/dist dist - - name: Release - env: - TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }} - TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }} - run: npx -p publib@latest publib-pypi - release_nuget: - name: Publish to NuGet Gallery - needs: release - runs-on: ubuntu-latest - permissions: - contents: read - if: needs.release.outputs.latest_commit == github.sha - steps: - - uses: actions/setup-node@v3 - with: - node-version: 16.x - - uses: actions/setup-dotnet@v3 - with: - dotnet-version: 3.x - - name: Download build artifacts - uses: actions/download-artifact@v3 - with: - name: build-artifact - path: dist - - name: Restore build artifact permissions - run: cd dist && setfacl --restore=permissions-backup.acl - continue-on-error: true - - name: Prepare Repository - run: mv dist .repo - - name: Install Dependencies - run: cd .repo && yarn install --check-files --frozen-lockfile - - name: Create dotnet artifact - run: cd .repo && npx projen package:dotnet - - name: Collect dotnet Artifact - run: mv .repo/dist dist - - name: Release - env: - NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} - run: npx -p publib@latest publib-nuget diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e5c3e6a2..d581ba0b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,7 +27,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v3 with: - node-version: 16.x + node-version: 18.x - name: Install dependencies run: yarn install --check-files --frozen-lockfile - name: release @@ -55,7 +55,7 @@ jobs: steps: - uses: actions/setup-node@v3 with: - node-version: 16.x + node-version: 18.x - name: Download build artifacts uses: actions/download-artifact@v3 with: @@ -84,7 +84,7 @@ jobs: steps: - uses: actions/setup-node@v3 with: - node-version: 16.x + node-version: 18.x - name: Download build artifacts uses: actions/download-artifact@v3 with: @@ -117,7 +117,7 @@ jobs: steps: - uses: actions/setup-node@v3 with: - node-version: 16.x + node-version: 18.x - uses: actions/setup-python@v4 with: python-version: 3.x @@ -152,7 +152,7 @@ jobs: steps: - uses: actions/setup-node@v3 with: - node-version: 16.x + node-version: 18.x - uses: actions/setup-dotnet@v3 with: dotnet-version: 3.x diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml deleted file mode 100644 index ca07d5a2..00000000 --- a/.github/workflows/stale.yml +++ /dev/null @@ -1,30 +0,0 @@ -# ~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen". - -name: stale -on: - schedule: - - cron: 0 1 * * * - workflow_dispatch: {} -jobs: - stale: - runs-on: ubuntu-latest - permissions: - issues: write - pull-requests: write - steps: - - uses: actions/stale@v4 - with: - days-before-stale: -1 - days-before-close: -1 - days-before-pr-stale: 14 - days-before-pr-close: 2 - stale-pr-message: This pull request is now marked as stale because it hasn't seen activity for a while. Add a comment or it will be closed soon. If you wish to exclude this issue from being marked as stale, add the "backlog" label. - close-pr-message: Closing this pull request as it hasn't seen activity for a while. Please add a comment @mentioning a maintainer to reopen. If you wish to exclude this issue from being marked as stale, add the "backlog" label. - stale-pr-label: stale - exempt-pr-labels: backlog - days-before-issue-stale: 60 - days-before-issue-close: 7 - stale-issue-message: This issue is now marked as stale because it hasn't seen activity for a while. Add a comment or it will be closed soon. If you wish to exclude this issue from being marked as stale, add the "backlog" label. - close-issue-message: Closing this issue as it hasn't seen activity for a while. Please add a comment @mentioning a maintainer to reopen. If you wish to exclude this issue from being marked as stale, add the "backlog" label. - stale-issue-label: stale - exempt-issue-labels: backlog diff --git a/.github/workflows/upgrade-cdk-v1.yml b/.github/workflows/upgrade-cdk-v1.yml deleted file mode 100644 index 7088ba62..00000000 --- a/.github/workflows/upgrade-cdk-v1.yml +++ /dev/null @@ -1,97 +0,0 @@ -name: upgrade-cdk-v1 -on: - workflow_dispatch: {} - schedule: - - cron: '0 4 * * *' -jobs: - upgrade-cdk: - runs-on: ubuntu-latest - permissions: - contents: read - outputs: - build_conclusion: ${{ steps.upgrade_cdk_version.outputs.build_conclusion }} - patch_created: ${{ steps.upgrade_cdk_version.outputs.patch_created }} - previous_version: ${{ steps.upgrade_cdk_version.outputs.previous_version }} - new_version: ${{ steps.upgrade_cdk_version.outputs.new_version }} - patch_name: ${{ steps.upgrade_cdk_version.outputs.patch_name }} - steps: - - name: Upgrade CDK Version - id: 'upgrade_cdk_version' - uses: renovosolutions/gh-action-awscdk-projen-version-bump@v2.5.1 - with: - major-version: 1 - ref: v1 - pr: - if: needs.upgrade-cdk.outputs.patch_created - name: Create Pull Request - needs: upgrade-cdk - runs-on: ubuntu-latest - permissions: - contents: write - pull-requests: write - checks: write - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: v1 - - name: Set git identity - run: |- - git config user.name "github-actions" - git config user.email "github-actions@github.com" - - name: Download patch - uses: actions/download-artifact@v2 - with: - name: ${{ needs.upgrade-cdk.outputs.patch_name }} - path: ${{ runner.temp }} - - name: Apply patch - run: '[ -s ${{ runner.temp }}/${{ needs.upgrade-cdk.outputs.patch_name }} ] && git apply ${{ runner.temp - }}/${{ needs.upgrade-cdk.outputs.patch_name }} || echo "Empty patch. Skipping."' - - name: Create Pull Request - id: create-pr - uses: peter-evans/create-pull-request@v3 - with: - token: ${{ secrets.GITHUB_TOKEN }} - commit-message: >- - chore(deps): upgrade `aws-cdk` version `${{ needs.upgrade-cdk.outputs.previous_version }}` -> `${{ needs.upgrade-cdk.outputs.new_version }}` - - - Upgrades project `aws-cdk` version `${{ needs.upgrade-cdk.outputs.previous_version }}` -> `${{ needs.upgrade-cdk.outputs.new_version }}`. See details in [workflow run]. - - - [Workflow Run]: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} - - - ------ - - - *Automatically created via the "upgrade-cdk" workflow* - branch: github-actions/upgrade-cdk-v1 - title: "chore(deps): upgrade `aws-cdk` version `${{ needs.upgrade-cdk.outputs.previous_version }}` -> `${{ needs.upgrade-cdk.outputs.new_version }}`" - body: >- - Upgrades project `aws-cdk` version `${{ needs.upgrade-cdk.outputs.previous_version }}` -> `${{ needs.upgrade-cdk.outputs.new_version }}`. See details in [workflow run]. - - - [Workflow Run]: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} - - - ------ - - - *Automatically created via the "upgrade-cdk-v1" workflow* - author: github-actions - committer: github-actions - signoff: true - - name: Update status check - if: steps.create-pr.outputs.pull-request-url != '' - run: "curl -i --fail -X POST -H \"Accept: application/vnd.github.v3+json\" -H - \"Authorization: token ${GITHUB_TOKEN}\" - https://api.github.com/repos/${{ github.repository }}/check-runs -d - '{\"name\":\"build\",\"head_sha\":\"github-actions/upgrade-cdk-v1\",\ - \"status\":\"completed\",\"conclusion\":\"${{ - needs.upgrade-cdk.outputs.build_conclusion }}\",\"output\":{\"title\":\"Created - via the upgrade-cdk-v1 workflow.\",\"summary\":\"Action run URL: - https://github.com/${{ github.repository }}/actions/runs/${{ - github.run_id }}\"}}'" - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/upgrade-cdk.yml b/.github/workflows/upgrade-cdk.yml index 4cc8dd9b..e3214256 100644 --- a/.github/workflows/upgrade-cdk.yml +++ b/.github/workflows/upgrade-cdk.yml @@ -2,7 +2,7 @@ name: upgrade-cdk on: workflow_dispatch: {} schedule: - - cron: '0 4 * * *' + - cron: '0 4 * * 2' jobs: upgrade-cdk: runs-on: ubuntu-latest diff --git a/.github/workflows/upgrade-master.yml b/.github/workflows/upgrade-master.yml index 5bfcafd2..ea309dac 100644 --- a/.github/workflows/upgrade-master.yml +++ b/.github/workflows/upgrade-master.yml @@ -4,7 +4,7 @@ name: upgrade-master on: workflow_dispatch: {} schedule: - - cron: 0 0 * * * + - cron: 0 0 * * 1 jobs: upgrade: name: Upgrade @@ -21,7 +21,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v3 with: - node-version: 16.x + node-version: 18.x - name: Install dependencies run: yarn install --check-files --frozen-lockfile - name: Upgrade dependencies @@ -77,7 +77,6 @@ jobs: *Automatically created by projen via the "upgrade-master" workflow* branch: github-actions/upgrade-master title: "chore(deps): upgrade dependencies" - labels: auto-approve,deps-upgrade body: |- Upgrades project dependencies. See details in [workflow run]. diff --git a/.github/workflows/upgrade-projen-master.yml b/.github/workflows/upgrade-projen-master.yml index a4ce648e..0399dcc2 100644 --- a/.github/workflows/upgrade-projen-master.yml +++ b/.github/workflows/upgrade-projen-master.yml @@ -4,7 +4,7 @@ name: upgrade-projen-master on: workflow_dispatch: {} schedule: - - cron: 0 2 * * 1 + - cron: 0 0 * * 1 jobs: upgrade: name: Upgrade @@ -21,7 +21,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v3 with: - node-version: 16.x + node-version: 18.x - name: Install dependencies run: yarn install --check-files --frozen-lockfile - name: Upgrade dependencies @@ -66,7 +66,7 @@ jobs: with: token: ${{ secrets.PROJEN_GITHUB_TOKEN }} commit-message: |- - chore(deps): upgrade projen + chore(deps): upgrade dependencies Upgrades project dependencies. See details in [workflow run]. @@ -76,7 +76,7 @@ jobs: *Automatically created by projen via the "upgrade-projen-master" workflow* branch: github-actions/upgrade-projen-master - title: "chore(deps): upgrade projen" + title: "chore(deps): upgrade dependencies" body: |- Upgrades project dependencies. See details in [workflow run]. diff --git a/.github/workflows/upgrade-projen-v1.yml b/.github/workflows/upgrade-projen-v1.yml deleted file mode 100644 index 3e29cb7c..00000000 --- a/.github/workflows/upgrade-projen-v1.yml +++ /dev/null @@ -1,90 +0,0 @@ -# ~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen". - -name: upgrade-projen-v1 -on: - workflow_dispatch: {} - schedule: - - cron: 0 2 * * 1 -jobs: - upgrade: - name: Upgrade - runs-on: ubuntu-latest - permissions: - contents: read - outputs: - patch_created: ${{ steps.create_patch.outputs.patch_created }} - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - ref: v1 - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 16.x - - name: Install dependencies - run: yarn install --check-files --frozen-lockfile - - name: Upgrade dependencies - run: npx projen upgrade-projen - - name: Find mutations - id: create_patch - run: |- - git add . - git diff --staged --patch --exit-code > .repo.patch || echo "patch_created=true" >> $GITHUB_OUTPUT - - name: Upload patch - if: steps.create_patch.outputs.patch_created - uses: actions/upload-artifact@v3 - with: - name: .repo.patch - path: .repo.patch - pr: - name: Create Pull Request - needs: upgrade - runs-on: ubuntu-latest - permissions: - contents: read - if: ${{ needs.upgrade.outputs.patch_created }} - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - ref: v1 - - name: Download patch - uses: actions/download-artifact@v3 - with: - name: .repo.patch - path: ${{ runner.temp }} - - name: Apply patch - run: '[ -s ${{ runner.temp }}/.repo.patch ] && git apply ${{ runner.temp }}/.repo.patch || echo "Empty patch. Skipping."' - - name: Set git identity - run: |- - git config user.name "github-actions" - git config user.email "github-actions@github.com" - - name: Create Pull Request - id: create-pr - uses: peter-evans/create-pull-request@v4 - with: - token: ${{ secrets.PROJEN_GITHUB_TOKEN }} - commit-message: |- - chore(deps): upgrade projen - - Upgrades project dependencies. See details in [workflow run]. - - [Workflow Run]: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} - - ------ - - *Automatically created by projen via the "upgrade-projen-v1" workflow* - branch: github-actions/upgrade-projen-v1 - title: "chore(deps): upgrade projen" - body: |- - Upgrades project dependencies. See details in [workflow run]. - - [Workflow Run]: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} - - ------ - - *Automatically created by projen via the "upgrade-projen-v1" workflow* - author: github-actions - committer: github-actions - signoff: true diff --git a/.github/workflows/upgrade-v1.yml b/.github/workflows/upgrade-v1.yml deleted file mode 100644 index d717523f..00000000 --- a/.github/workflows/upgrade-v1.yml +++ /dev/null @@ -1,91 +0,0 @@ -# ~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen". - -name: upgrade-v1 -on: - workflow_dispatch: {} - schedule: - - cron: 0 0 * * * -jobs: - upgrade: - name: Upgrade - runs-on: ubuntu-latest - permissions: - contents: read - outputs: - patch_created: ${{ steps.create_patch.outputs.patch_created }} - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - ref: v1 - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 16.x - - name: Install dependencies - run: yarn install --check-files --frozen-lockfile - - name: Upgrade dependencies - run: npx projen upgrade - - name: Find mutations - id: create_patch - run: |- - git add . - git diff --staged --patch --exit-code > .repo.patch || echo "patch_created=true" >> $GITHUB_OUTPUT - - name: Upload patch - if: steps.create_patch.outputs.patch_created - uses: actions/upload-artifact@v3 - with: - name: .repo.patch - path: .repo.patch - pr: - name: Create Pull Request - needs: upgrade - runs-on: ubuntu-latest - permissions: - contents: read - if: ${{ needs.upgrade.outputs.patch_created }} - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - ref: v1 - - name: Download patch - uses: actions/download-artifact@v3 - with: - name: .repo.patch - path: ${{ runner.temp }} - - name: Apply patch - run: '[ -s ${{ runner.temp }}/.repo.patch ] && git apply ${{ runner.temp }}/.repo.patch || echo "Empty patch. Skipping."' - - name: Set git identity - run: |- - git config user.name "github-actions" - git config user.email "github-actions@github.com" - - name: Create Pull Request - id: create-pr - uses: peter-evans/create-pull-request@v4 - with: - token: ${{ secrets.PROJEN_GITHUB_TOKEN }} - commit-message: |- - chore(deps): upgrade dependencies - - Upgrades project dependencies. See details in [workflow run]. - - [Workflow Run]: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} - - ------ - - *Automatically created by projen via the "upgrade-v1" workflow* - branch: github-actions/upgrade-v1 - title: "chore(deps): upgrade dependencies" - labels: auto-approve,deps-upgrade - body: |- - Upgrades project dependencies. See details in [workflow run]. - - [Workflow Run]: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} - - ------ - - *Automatically created by projen via the "upgrade-v1" workflow* - author: github-actions - committer: github-actions - signoff: true diff --git a/.gitignore b/.gitignore index d1bfbd27..46b0f385 100644 --- a/.gitignore +++ b/.gitignore @@ -3,9 +3,6 @@ !/.projen/tasks.json !/.projen/deps.json !/.projen/files.json -!/.mergify.yml -!/.github/workflows/pull-request-lint.yml -!/.github/workflows/stale.yml !/package.json !/LICENSE !/.npmignore @@ -40,11 +37,8 @@ junit.xml /dist/changelog.md /dist/version.txt !/.github/workflows/release.yml -!/.github/workflows/release-v1.yml !/.github/workflows/upgrade-master.yml -!/.github/workflows/upgrade-v1.yml !/.github/pull_request_template.md -!/.npmrc !/test/ !/tsconfig.dev.json !/src/ @@ -55,6 +49,6 @@ junit.xml tsconfig.json !/API.md !/.github/workflows/upgrade-projen-master.yml -!/.github/workflows/upgrade-projen-v1.yml .functionbundle/* -.venv/* +**/.venv/** +**/__pycache__/** diff --git a/.mergify.yml b/.mergify.yml deleted file mode 100644 index e6d08a49..00000000 --- a/.mergify.yml +++ /dev/null @@ -1,42 +0,0 @@ -# ~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen". - -queue_rules: - - name: default - update_method: merge - conditions: - - "#approved-reviews-by>=1" - - -label~=(do-not-merge) - - status-success=build - - status-success=package-js - - status-success=package-python - - status-success=package-dotnet -pull_request_rules: - - name: Automatically approve dependency upgrade PRs if they pass build - actions: - review: - type: APPROVE - message: Automatically approved dependency upgrade PR - conditions: - - label=auto-approve - - label=deps-upgrade - - -label~=(do-not-merge) - - status-success=build - - author=github-actions[bot] - - 'title="chore(deps): upgrade dependencies"' - - name: Automatic merge on approval and successful build - actions: - delete_head_branch: {} - queue: - method: squash - name: default - commit_message_template: |- - {{ title }} (#{{ number }}) - - {{ body }} - conditions: - - "#approved-reviews-by>=1" - - -label~=(do-not-merge) - - status-success=build - - status-success=package-js - - status-success=package-python - - status-success=package-dotnet diff --git a/.npmignore b/.npmignore index c1fa849c..fd227aa0 100644 --- a/.npmignore +++ b/.npmignore @@ -6,7 +6,6 @@ junit.xml permissions-backup.acl /dist/changelog.md /dist/version.txt -/.mergify.yml /test/ /tsconfig.dev.json /src/ @@ -23,4 +22,5 @@ tsconfig.tsbuildinfo /.eslintrc.json !.jsii .functionbundle/* -.venv/* +**/.venv/** +**/__pycache__/** diff --git a/.projen/deps.json b/.projen/deps.json index f475d074..28caa157 100644 --- a/.projen/deps.json +++ b/.projen/deps.json @@ -12,26 +12,12 @@ }, { "name": "@typescript-eslint/eslint-plugin", - "version": "^5", + "version": "^6", "type": "build" }, { "name": "@typescript-eslint/parser", - "version": "^5", - "type": "build" - }, - { - "name": "aws-cdk-lib", - "version": "2.86.0", - "type": "build" - }, - { - "name": "constructs", - "version": "10.0.5", - "type": "build" - }, - { - "name": "eslint-import-resolver-node", + "version": "^6", "type": "build" }, { @@ -69,6 +55,11 @@ "name": "jsii-pacmak", "type": "build" }, + { + "name": "jsii-rosetta", + "version": "1.x", + "type": "build" + }, { "name": "jsii", "version": "1.x", @@ -113,7 +104,7 @@ }, { "name": "aws-cdk-lib", - "version": "^2.86.0", + "version": "^2.106.1", "type": "peer" }, { @@ -123,7 +114,7 @@ }, { "name": "@renovosolutions/cdk-library-one-time-event", - "version": "^2.0.48", + "version": "^2.1.125", "type": "runtime" } ], diff --git a/.projen/files.json b/.projen/files.json index caa5f50d..1bf9bddf 100644 --- a/.projen/files.json +++ b/.projen/files.json @@ -4,17 +4,10 @@ ".gitattributes", ".github/pull_request_template.md", ".github/workflows/build.yml", - ".github/workflows/pull-request-lint.yml", - ".github/workflows/release-v1.yml", ".github/workflows/release.yml", - ".github/workflows/stale.yml", ".github/workflows/upgrade-master.yml", ".github/workflows/upgrade-projen-master.yml", - ".github/workflows/upgrade-projen-v1.yml", - ".github/workflows/upgrade-v1.yml", ".gitignore", - ".mergify.yml", - ".npmrc", ".projen/deps.json", ".projen/files.json", ".projen/tasks.json", diff --git a/.projen/tasks.json b/.projen/tasks.json index cddeefc6..f6dc208f 100644 --- a/.projen/tasks.json +++ b/.projen/tasks.json @@ -241,31 +241,6 @@ } ] }, - "release:v1": { - "name": "release:v1", - "description": "Prepare a release from \"v1\" branch", - "env": { - "RELEASE": "true", - "MAJOR": "1" - }, - "steps": [ - { - "exec": "rm -fr dist" - }, - { - "spawn": "bump" - }, - { - "spawn": "build" - }, - { - "spawn": "unbump" - }, - { - "exec": "git diff --ignore-space-at-eol --exit-code" - } - ] - }, "test": { "name": "test", "description": "Run tests", @@ -315,25 +290,13 @@ "exec": "yarn upgrade npm-check-updates" }, { - "exec": "npm-check-updates --dep dev --upgrade --target=minor --reject='aws-cdk-lib,constructs,jsii,projen'" - }, - { - "exec": "npm-check-updates --dep optional --upgrade --target=minor --reject='aws-cdk-lib,constructs,jsii,projen'" - }, - { - "exec": "npm-check-updates --dep peer --upgrade --target=minor --reject='aws-cdk-lib,constructs,jsii,projen'" - }, - { - "exec": "npm-check-updates --dep prod --upgrade --target=minor --reject='aws-cdk-lib,constructs,jsii,projen'" - }, - { - "exec": "npm-check-updates --dep bundle --upgrade --target=minor --reject='aws-cdk-lib,constructs,jsii,projen'" + "exec": "npm-check-updates --upgrade --target=minor --peer --dep=dev,peer,prod,optional --filter=@types/jest,@types/node,@typescript-eslint/eslint-plugin,@typescript-eslint/parser,eslint-import-resolver-typescript,eslint-plugin-import,eslint,jest-junit,jest,jsii-diff,jsii-docgen,jsii-pacmak,npm-check-updates,standard-version,ts-jest,ts-node,typescript,aws-cdk-lib,constructs,@renovosolutions/cdk-library-one-time-event" }, { "exec": "yarn install --check-files" }, { - "exec": "yarn upgrade @types/jest @types/node @typescript-eslint/eslint-plugin @typescript-eslint/parser aws-cdk-lib constructs eslint-import-resolver-node eslint-import-resolver-typescript eslint-plugin-import eslint jest-junit jest jsii-diff jsii-docgen jsii-pacmak jsii npm-check-updates standard-version ts-jest ts-node typescript aws-cdk-lib constructs @renovosolutions/cdk-library-one-time-event" + "exec": "yarn upgrade @types/jest @types/node @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint-import-resolver-typescript eslint-plugin-import eslint jest-junit jest jsii-diff jsii-docgen jsii-pacmak npm-check-updates standard-version ts-jest ts-node typescript aws-cdk-lib constructs @renovosolutions/cdk-library-one-time-event" }, { "exec": "npx projen" @@ -345,7 +308,7 @@ }, "upgrade-projen": { "name": "upgrade-projen", - "description": "upgrade projen", + "description": "upgrade dependencies", "env": { "CI": "0" }, @@ -354,19 +317,7 @@ "exec": "yarn upgrade npm-check-updates" }, { - "exec": "npm-check-updates --dep dev --upgrade --target=minor --filter='projen'" - }, - { - "exec": "npm-check-updates --dep optional --upgrade --target=minor --filter='projen'" - }, - { - "exec": "npm-check-updates --dep peer --upgrade --target=minor --filter='projen'" - }, - { - "exec": "npm-check-updates --dep prod --upgrade --target=minor --filter='projen'" - }, - { - "exec": "npm-check-updates --dep bundle --upgrade --target=minor --filter='projen'" + "exec": "npm-check-updates --upgrade --target=minor --peer --dep=dev,peer,prod,optional --filter=projen" }, { "exec": "yarn install --check-files" diff --git a/.projenrc.ts b/.projenrc.ts index 380fb7d2..3e6588fd 100644 --- a/.projenrc.ts +++ b/.projenrc.ts @@ -3,19 +3,14 @@ const project = new awscdk.AwsCdkConstructLibrary({ author: 'Renovo Solutions', authorAddress: 'webmaster+cdk@renovo1.com', projenrcTs: true, - cdkVersion: '2.86.0', + cdkVersion: '2.106.1', defaultReleaseBranch: 'master', majorVersion: 2, - releaseBranches: { - v1: { - majorVersion: 1, - }, - }, name: '@renovosolutions/cdk-library-certbot', description: 'AWS CDK Construct Library to manage Lets Encrypt certificate renewals with Certbot', repositoryUrl: 'https://github.com/RenovoSolutions/cdk-library-certbot.git', deps: [ - '@renovosolutions/cdk-library-one-time-event@^2.0.48', + '@renovosolutions/cdk-library-one-time-event@^2.1.125', ], keywords: [ 'letsencrypt', @@ -27,50 +22,19 @@ const project = new awscdk.AwsCdkConstructLibrary({ ], depsUpgrade: true, depsUpgradeOptions: { + workflow: true, + exclude: ['projen'], workflowOptions: { - labels: ['auto-approve', 'deps-upgrade'], + schedule: javascript.UpgradeDependenciesSchedule.WEEKLY, }, - exclude: ['projen'], }, githubOptions: { - mergify: true, - mergifyOptions: { - rules: [ - { - name: 'Automatically approve dependency upgrade PRs if they pass build', - actions: { - review: { - type: 'APPROVE', - message: 'Automatically approved dependency upgrade PR', - }, - }, - conditions: [ - 'label=auto-approve', - 'label=deps-upgrade', - '-label~=(do-not-merge)', - 'status-success=build', - 'author=github-actions[bot]', - 'title="chore(deps): upgrade dependencies"', - ], - }, - ], - }, + mergify: false, pullRequestLintOptions: { - semanticTitle: true, - semanticTitleOptions: { - types: [ - 'chore', - 'docs', - 'feat', - 'fix', - 'ci', - 'refactor', - 'test', - ], - }, + semanticTitle: false, }, }, - stale: true, + stale: false, releaseToNpm: true, release: true, npmAccess: javascript.NpmAccess.PUBLIC, @@ -96,14 +60,14 @@ new javascript.UpgradeDependencies(project, { taskName: 'upgrade-projen', workflow: true, workflowOptions: { - schedule: javascript.UpgradeDependenciesSchedule.expressions(['0 2 * * 1']), + schedule: javascript.UpgradeDependenciesSchedule.WEEKLY, }, - pullRequestTitle: 'upgrade projen', }); const ignorePatterns = [ '.functionbundle/*', - '.venv/*', + '**/.venv/**', + '**/__pycache__/**', ]; ignorePatterns.forEach( (pattern) => { project.gitignore.addPatterns(pattern); diff --git a/API.md b/API.md index eaf58b4d..df692ecd 100644 --- a/API.md +++ b/API.md @@ -97,6 +97,19 @@ If no bucket is given one will be created automatically. --- +##### `certificateStorage`Optional + +```typescript +public readonly certificateStorage: CertificateStorageType; +``` + +- *Type:* [`@renovosolutions/cdk-library-certbot.CertificateStorageType`](#@renovosolutions/cdk-library-certbot.CertificateStorageType) +- *Default:* CertificateStorageType.S3 + +The method of storage for the resulting certificates. + +--- + ##### `enableInsights`Optional ```typescript @@ -187,6 +200,19 @@ Defaults to layer for US-EAST-1 --- +##### `kmsKeyAlias`Optional + +```typescript +public readonly kmsKeyAlias: string; +``` + +- *Type:* `string` +- *Default:* AWS managed key + +The KMS key to use for encryption of the certificates in Secrets Manager or Systems Manager Parameter Store. + +--- + ##### `layers`Optional ```typescript @@ -295,6 +321,19 @@ The schedule for the certificate check trigger. --- +##### `secretsManagerPath`Optional + +```typescript +public readonly secretsManagerPath: string; +``` + +- *Type:* `string` +- *Default:* `/certbot/certificates/${letsencryptDomains.split(',')[0]}/` + +The path to store the certificates in AWS Secrets Manager. + +--- + ##### `snsTopic`Optional ```typescript @@ -309,6 +348,19 @@ If no topic is given one will be created automatically. --- +##### `ssmSecurePath`Optional + +```typescript +public readonly ssmSecurePath: string; +``` + +- *Type:* `string` +- *Default:* `/certbot/certificates/${letsencryptDomains.split(',')[0]}/` + +The path to store the certificates in AWS Systems Manager Parameter Store. + +--- + ##### `timeout`Optional ```typescript @@ -324,3 +376,27 @@ The timeout duration for Lambda function. +## Enums + +### CertificateStorageType + +#### `SECRETS_MANAGER` + +Store the certificate in AWS Secrets Manager. + +--- + + +#### `S3` + +Store the certificates in S3. + +--- + + +#### `SSM_SECURE` + +Store the certificates as a parameter in AWS Systems Manager Parameter Store with encryption. + +--- + diff --git a/README.md b/README.md index 68e2799d..c8d535c3 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,9 @@ Original [gist](# Modified from original gist https://gist.github.com/arkadiyt/5 This construct utilizes a Route 53 hosted zone lookup so it will require that your stack has [environment variables set for account and region](See https://docs.aws.amazon.com/cdk/latest/guide/environments.html for more details.). -### Typescript +## Typescript + +### Typescript with Default Setup ```typescript import * as cdk from '@aws-cdk/core'; @@ -50,6 +52,66 @@ export class CdkExampleCertsStack extends cdk.Stack { } ``` +### Typescript with alternate storage location (Secrets Manager) + +```typescript +import * as cdk from '@aws-cdk/core'; +import { Certbot, CertificateStorageType } from '@renovosolutions/cdk-library-certbot'; +import { Architecture } from '@aws-cdk/aws-lambda'; + +export class CdkExampleCertsStack extends cdk.Stack { + constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { + super(scope, id, props); + + let domains = [ + 'example.com', + 'www.example.com' + ] + + new Certbot(this, 'cert', { + letsencryptDomains: domains.join(','), + letsencryptEmail: 'webmaster+letsencrypt@example.com', + hostedZoneNames: [ + 'example.com' + ] + certificateStorage: CertificateStorageType.SECRETS_MANAGER + // Optional path + secretsManagerPath: '/path/to/secret/' + }) + } +} +``` + +### Typescript with alternate storage location (Parameter Store) + +```typescript +import * as cdk from '@aws-cdk/core'; +import { Certbot, CertificateStorageType } from '@renovosolutions/cdk-library-certbot'; +import { Architecture } from '@aws-cdk/aws-lambda'; + +export class CdkExampleCertsStack extends cdk.Stack { + constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { + super(scope, id, props); + + let domains = [ + 'example.com', + 'www.example.com' + ] + + new Certbot(this, 'cert', { + letsencryptDomains: domains.join(','), + letsencryptEmail: 'webmaster+letsencrypt@example.com', + hostedZoneNames: [ + 'example.com' + ] + certificateStorage: CertificateStorageType.SSM_SECURE + // Optional path + ssmSecurePath: '/path/to/secret/' + }) + } +} +``` + ### Typescript with zone creation in the same stack ```typescript @@ -105,3 +167,12 @@ class CdkExampleCertsStack(cdk.Stack): hosted_zone_names=["example.com"] ) ``` + +## Testing the handler in this project + +- Set up a python virtual env with `python3.10 -m venv .venv` +- Use the virtual env with `source .venv/bin/activate` +- Install dependencies with `pip install -r function/tests/requirements.txt` +- Run `pytest -v` + +The testing using `moto` to mock AWS services and verify the function does what is expected for each given storage type. diff --git a/function/build.bash b/function/build.bash deleted file mode 100755 index e4b94fd2..00000000 --- a/function/build.bash +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -# You can use this for a pre-commit hook by doing -# ln -s -f $PWD/function/build.bash .git/hooks/pre-commit - -if git diff --cached | grep 'diff --git a/function/index.py b/function/index.py' ||\ - git diff --cached | grep 'diff --git a/function/requirements.txt b/function/requirements.txt' ||\ - [[ "$1" == "refresh" ]]; then - rm function/function.zip - rm -rf .venv - python3 -m venv .venv - source .venv/bin/activate - BUILD_DIR='.functionbundle/' - mkdir -p $BUILD_DIR - pip install -r function/requirements.txt -t $BUILD_DIR - cp function/index.py $BUILD_DIR/index.py - cd $BUILD_DIR - zip -r ../function/function.zip . - cd .. - if ! [[ "$1" == "refresh" ]]; then - git add function/function.zip - fi -fi diff --git a/function/function.zip b/function/function.zip deleted file mode 100644 index 8094cc26..00000000 Binary files a/function/function.zip and /dev/null differ diff --git a/function/index.py b/function/src/index.py similarity index 59% rename from function/index.py rename to function/src/index.py index e178dfc7..18df29e3 100644 --- a/function/index.py +++ b/function/src/index.py @@ -7,25 +7,77 @@ import subprocess from cryptography import x509 from cryptography.hazmat.backends import default_backend +from botocore.exceptions import ClientError + +def store_in_secrets_manager(secret_name, secret_string): + client = boto3.client('secretsmanager') + try: + create_args = { + 'Name': secret_name, + 'SecretString': secret_string + } + + if 'CUSTOM_KMS_KEY_ID' in os.environ: + create_args['KmsKeyId'] = os.environ['CUSTOM_KMS_KEY_ID'] + + client.create_secret(**create_args) + except ClientError as e: + if e.response['Error']['Code'] == 'ResourceExistsException': + update_args = { + 'SecretId': secret_name, + 'SecretString': secret_string + } + + if 'CUSTOM_KMS_KEY_ID' in os.environ: + update_args['KmsKeyId'] = os.environ['CUSTOM_KMS_KEY_ID'] + + client.update_secret(**update_args) + +def store_in_parameter_store(param_name, param_value): + ssm = boto3.client('ssm') + put_param_args = { + 'Name': param_name, + 'Value': param_value, + 'Type': 'SecureString', + 'Overwrite': True + } + + if 'CUSTOM_KMS_KEY_ID' in os.environ: + put_param_args['KeyId'] = os.environ['CUSTOM_KMS_KEY_ID'] + + ssm.put_parameter(**put_param_args) def upload_to_s3(local_path, keyname): - print('INFO: Uploading files to S3') + print(f'INFO: Uploading {keyname} to S3') s3 = boto3.resource('s3') - data = open(local_path, 'rb') - s3.Bucket(os.environ['CERTIFICATE_BUCKET']).put_object(Key=f"{os.environ['OBJECT_PREFIX']}{keyname}", Body=data) + with open(local_path, 'rb') as file: + data = file.read() + s3.Bucket(os.environ['CERTIFICATE_BUCKET']).put_object(Key=f"{os.environ['OBJECT_PREFIX']}{keyname}", Body=data) -def read_and_delete_file(path, filename): +def read_and_delete_file(path, filename, storage_method): if not os.getenv("DRY_RUN", 'False').lower() in ["true", "1"]: - upload_to_s3(path, filename) - - with open(path, 'r') as file: + with open(path, 'rb') as file: contents = file.read() + + try: + string_contents = contents.decode('utf-8') + except UnicodeDecodeError: + print(f"Error: The file {filename} contains binary data that can't be decoded as UTF-8.") + raise + + if storage_method == 's3': + upload_to_s3(path, filename) + elif storage_method == 'secretsmanager': + store_in_secrets_manager(os.environ['CERTIFICATE_SECRET_PATH'] + filename, string_contents) + elif storage_method == 'ssm_secure': + store_in_parameter_store(os.environ['CERTIFICATE_PARAMETER_PATH'] + filename, string_contents) + os.remove(path) return contents else: print(f'WARN: Dry run was used so {filename} was not generated.') -def provision_cert(email, domains): +def provision_cert(email, domains, storage_method): cerbot_args = [ 'certonly', # Obtain a cert but don't install it '-n', # Run in non-interactive mode @@ -40,6 +92,7 @@ def provision_cert(email, domains): '--preferred-chain', os.environ['PREFERRED_CHAIN'], ] if os.getenv("DRY_RUN", 'False').lower() in ["true", "1"]: + print('WARN: Dry run was used so --dry-run was added to certbot args.') cerbot_args.append("--dry-run") certbot.main.main(cerbot_args) @@ -47,9 +100,9 @@ def provision_cert(email, domains): first_domain = domains.split(',')[0] path = '/tmp/config-dir/live/' + first_domain + '/' return { - 'certificate': read_and_delete_file(path + 'cert.pem', 'cert.pem'), - 'private_key': read_and_delete_file(path + 'privkey.pem', 'privkey.pem'), - 'certificate_chain': read_and_delete_file(path + 'chain.pem', 'chain.pem') + 'certificate': read_and_delete_file(path + 'cert.pem', 'cert.pem', storage_method), + 'private_key': read_and_delete_file(path + 'privkey.pem', 'privkey.pem', storage_method), + 'certificate_chain': read_and_delete_file(path + 'chain.pem', 'chain.pem', storage_method) } def should_provision(domains): @@ -86,7 +139,7 @@ def find_existing_cert(domains): return None def get_cert_info(certificate): - cert = x509.load_pem_x509_certificate(str.encode(certificate), default_backend()) + cert = x509.load_pem_x509_certificate(certificate, default_backend()) # could technically dig in and get all key info here, but this is the basics cert_info = f""" Certificate info: @@ -134,11 +187,27 @@ def upload_cert_to_acm(cert, domains): return None if certificate_arn else acm_response['CertificateArn'] def handler(event, context): + storage_method = os.getenv('CERTIFICATE_STORAGE', 's3').lower() + + print("CERTIFICATE_STORAGE: " + storage_method) + print("LETSENCRYPT_DOMAINS: " + os.environ['LETSENCRYPT_DOMAINS']) + print("LETSENCRYPT_EMAIL: " + os.environ['LETSENCRYPT_EMAIL']) + print("PREFERRED_CHAIN: " + os.environ['PREFERRED_CHAIN']) + print("DRY_RUN: " + os.environ['DRY_RUN']) + + # Check for required environment variables based on storage method + if storage_method == 's3' and 'CERTIFICATE_BUCKET' not in os.environ: + raise ValueError("S3 storage selected but CERTIFICATE_BUCKET is not set") + elif storage_method == 'secretsmanager' and 'CERTIFICATE_SECRET_PATH' not in os.environ: + raise ValueError("Secrets Manager storage selected but CERTIFICATE_SECRET_PATH is not set") + elif storage_method == 'ssm_secure' and 'CERTIFICATE_PARAMETER_PATH' not in os.environ: + raise ValueError("Parameter Store storage selected but CERTIFICATE_PARAMETER_PATH is not set") + domains = os.environ['LETSENCRYPT_DOMAINS'] if should_provision(domains): - cert = provision_cert(os.environ['LETSENCRYPT_EMAIL'], domains) + cert = provision_cert(os.environ['LETSENCRYPT_EMAIL'], domains, storage_method) if not os.getenv("DRY_RUN", 'False').lower() in ["true", "1"]: upload_cert_to_acm(cert, domains) notify_via_sns(os.environ['NOTIFICATION_SNS_ARN'], domains, cert['certificate']) else: - print('WARN: Dry run was used so ACM import and S3 upload arent tested.') + print('WARN: Dry run was used so ACM import and storage upload arent tested.') diff --git a/function/requirements.txt b/function/src/requirements.txt similarity index 100% rename from function/requirements.txt rename to function/src/requirements.txt diff --git a/function/tests/conftest.py b/function/tests/conftest.py new file mode 100644 index 00000000..16aa6b3c --- /dev/null +++ b/function/tests/conftest.py @@ -0,0 +1,19 @@ +import pytest +import os + +@pytest.fixture(autouse=True) +def set_env_vars(): + os.environ['LETSENCRYPT_EMAIL'] = 'email@example.com' + os.environ['LETSENCRYPT_DOMAINS'] = 'example.com' + os.environ['PREFERRED_CHAIN'] = 'ISRG Root X1' + os.environ['CERTIFICATE_BUCKET'] = 'example-cert-bucket' + os.environ['CERTIFICATE_STORAGE'] = 's3' + os.environ['NOTIFICATION_SNS_ARN'] = 'arn:aws:sns:us-east-1:123456789012:example-topic' + os.environ['REISSUE_DAYS'] = '30' + os.environ['DRY_RUN'] = 'False' + os.environ['AWS_DEFAULT_REGION'] = 'us-east-1' + os.environ['AWS_REGION'] = 'us-east-1' + os.environ['AWS_ACCESS_KEY_ID'] = 'fake' + os.environ['AWS_SECRET_ACCESS_KEY'] = 'fake' + os.environ['OBJECT_PREFIX'] = '' + yield diff --git a/function/tests/requirements.txt b/function/tests/requirements.txt new file mode 100644 index 00000000..0167936b --- /dev/null +++ b/function/tests/requirements.txt @@ -0,0 +1,6 @@ +pytest +moto +boto3 +certbot +certbot-dns-route53 +cryptography \ No newline at end of file diff --git a/function/tests/test_handler.py b/function/tests/test_handler.py new file mode 100644 index 00000000..aaf19dec --- /dev/null +++ b/function/tests/test_handler.py @@ -0,0 +1,330 @@ +from unittest.mock import patch, mock_open, MagicMock +from moto import mock_s3, mock_secretsmanager, mock_ssm, mock_acm, mock_sns +import os +import sys +import pytest +import boto3 +import datetime +from cryptography import x509 +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +import src.index as index + +mock_list_certs_response = { + 'CertificateSummaryList': [ + { + 'CertificateArn': 'arn:aws:acm:region:123456789012:certificate/12345678-1234-1234-1234-123456789012', + 'DomainName': 'example.com' + }, + { + 'CertificateArn': 'arn:aws:acm:region:123456789012:certificate/12345678-1234-1234-1234-123456789013', + 'DomainName': 'example2.com' + } + ] +} + +mock_response = { + 'Certificate': { + 'CertificateArn': 'arn:aws:acm:region:123456789012:certificate/12345678-1234-1234-1234-123456789012', + 'SubjectAlternativeNames': ['example.com', 'www.example.com'], + } +} + +MOCK_CERTIFICATE = b"""-----BEGIN CERTIFICATE----- +MIIE+zCCAuMCFGX4FZJHqfPYrEqXSlutm5puelilMA0GCSqGSIb3DQEBCwUAMDox +CzAJBgNVBAYTAnVzMQswCQYDVQQIDAJjYTEOMAwGA1UEBwwFbG9jYWwxDjAMBgNV +BAoMBXBsYWNlMB4XDTIzMTExMjIyNDEyN1oXDTI0MTExMTIyNDEyN1owOjELMAkG +A1UEBhMCdXMxCzAJBgNVBAgMAmNhMQ4wDAYDVQQHDAVsb2NhbDEOMAwGA1UECgwF +cGxhY2UwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCiSNBcvzzFg4DH +rva0PkByIdNRdOt+7zuq6N34vD/zjrjqZ3Hm5c5UMfurJU8/oJbfdNu3mb1wYfQ0 +wW0SbUtGPSaN5hQJ4BxTYzVx4tNZjWn9c5ZDLpDl3pbTs1BNFw+4Ca4+YaxUm0Fi +HOL9V4HkzqxFIxYLEcpN/C9zgGVIUkPaDtgYgdpLttPRP/cSSdbwS+ZiBue8lhcD +YpiUIxPbgxcUirxAz0q1O+wKc3IZymwp42LUqWQHLjpDqbPu5Hc4HIvcYVA3C42h +Wzch6OGRwbFd3ME50YieM0lPv4E0VuskNGC2LmPfatAgROZzc6bF+Ddd6kWgmxL/ +RqhDslVxZMKVrAO6G9zvgSw+C+smThFgPx/97qq7muuEdc6ny0+wdP8vp+bxYc0B +vuhCTXzArPrrySKdi0OPybnF30dorBJN1DcdLJM3dwsBljvyF05M+slpZbM4uTlU +4vNPDc3Z+sNLXQjENSnpRIlLA/8NjeZCkxr9yrZfKiOoLoddeymxKsyUyks0Hkdw +JqIOsCRwFn3YGM0hDwzAgd7bqz3AF93bZN1uIXCO52w4idDbrKPwgl6FFpGAKVnv +ot/BG7UmAkvSX7nbStssQSjmqWoQ4Xtos2+RG7GFSR43vV/UeRBN8UXt1TiYhWqk +x3hAokAooHy2l+zlIHVqk0HvzFGkqQIDAQABMA0GCSqGSIb3DQEBCwUAA4ICAQCW +wCizyL72Mp5JSt/SBpugTVgJny3BS7gIrc5rBbxwmh4wx4cOTqm1ejlQKM00vS36 +lhh3vBAbQg+VR8HBCQTCgmoIxlvHvyF+QSkfLS2C/XHUFUlzN8R8QS2sYZKx/aC8 +B7i97iqXdaqYjaWSRrg+JPLcsV9xHcfohbkde6NjWdMb48nb0jNW+WvUBx+Wl+Pu +r2m86aCv/fvlRGLL+2t8WGrFvtJXg00Mz/uZrruj7XNJgweNtZ16UuUHTZ+TIdiP +qXv5J1Ys5hqESX5fAadlgQWT3rgJENpJQdJHJICrf/uSDqevVfUoGzq3BeeFnPr/ +URcgS9kJYHaIYxZwH8JOHuAq0bBU45nDipmrPIcE87CgZ5mV+yd1OI3p/Ko0DRnN +mlIlaSMiP/GxeK7/fIwuFTTxbkGmQgsBZasVZg/kLkBVDkCETDUzubiHoDI3JRUr +dQb6yrkJt9E6V/U/XAGnIGn2ENHbRRdlxZAU0BHMh5sywo/PoT8aDZknrSbrJnQ/ +/mTe57Rr3WL9cJSiXnLoFBa6YkJZKI3aZoNvJ8ob05f7lInn1zz+9gjsIHuLx2aC +xh4tD+G9eyEnrxpo2tyIJT8Mlh5/PKV/X696vI3yKIIHsp7gIqVmqWNTmK9kPYzq +ZTzQYlzE5AO7wo2MN1E1pJ++6vEhto3taDhouCWTeQ== +-----END CERTIFICATE-----""" + +MOCK_PRIVATE_KEY = b"""-----BEGIN PRIVATE KEY----- +MIIJQQIBADANBgkqhkiG9w0BAQEFAASCCSswggknAgEAAoICAQCiSNBcvzzFg4DH +rva0PkByIdNRdOt+7zuq6N34vD/zjrjqZ3Hm5c5UMfurJU8/oJbfdNu3mb1wYfQ0 +wW0SbUtGPSaN5hQJ4BxTYzVx4tNZjWn9c5ZDLpDl3pbTs1BNFw+4Ca4+YaxUm0Fi +HOL9V4HkzqxFIxYLEcpN/C9zgGVIUkPaDtgYgdpLttPRP/cSSdbwS+ZiBue8lhcD +YpiUIxPbgxcUirxAz0q1O+wKc3IZymwp42LUqWQHLjpDqbPu5Hc4HIvcYVA3C42h +Wzch6OGRwbFd3ME50YieM0lPv4E0VuskNGC2LmPfatAgROZzc6bF+Ddd6kWgmxL/ +RqhDslVxZMKVrAO6G9zvgSw+C+smThFgPx/97qq7muuEdc6ny0+wdP8vp+bxYc0B +vuhCTXzArPrrySKdi0OPybnF30dorBJN1DcdLJM3dwsBljvyF05M+slpZbM4uTlU +4vNPDc3Z+sNLXQjENSnpRIlLA/8NjeZCkxr9yrZfKiOoLoddeymxKsyUyks0Hkdw +JqIOsCRwFn3YGM0hDwzAgd7bqz3AF93bZN1uIXCO52w4idDbrKPwgl6FFpGAKVnv +ot/BG7UmAkvSX7nbStssQSjmqWoQ4Xtos2+RG7GFSR43vV/UeRBN8UXt1TiYhWqk +x3hAokAooHy2l+zlIHVqk0HvzFGkqQIDAQABAoICABKxoI7j2J7ypFsG5JROt3hu +PRFyY85Ixe7Mya+6v63RZauwJDFyN2+rck98tMGiQL7s5IJ5y0Cu3UVWeAyvWlnK +TC6nBO0+S6+vYJtbLaLF5M0Ktjx27hS3V1h7nLxvSPhCOo16Ytzm0C6lH+C0ZoTH +lJXs52p5r3wxmKW4HJ1VcfYkekVtxTUDkn2AM3h/2P/v6PynHvqyWg73GexhPgsD +RsgEUzsupcR1ap3+6R3fcNDtHe1cCzxohChXMXWgtmWtpCQhcZllqKL1sZwjtMLo +NQOYR7SJVoYivPHayt9kmSGf3E7KzpEQlM5Ndt5wbBL8oiQctc3nudXTeyk72cD5 +3FZQJriVxR1cMvkNVZ0+B4mGcEzRaYhVFFvBbyvHD7OqrQpGytEMkc5Sqp9gaZxj +aXbuDso/P2OplSgT/RBdI4pV2uf4haYjGkNMwzO24KFAK1MrpqopmDKpTuA0K4Hh +FWzYJ11yO/Ttwz9I9RQooma6Il4nK+Gq8vvvZuFYMz0J5RMlv1uQHfCpcIIY/WFE +pOzfW87hRLmAg2aI5EHVnatcUnHf0yrMbAVXQvNM23P6uJPC4Vo9HIBk1/H7+wBq +cOj8uVf2C/PN1vHjw/tFh4qL0lrw0jLSmtPHTGFFEIbJHWrUzOKsSUDTQeL/L0Wh +KpiVZDFW7FVIG5j3UAChAoIBAQDSVV5jpL7HWRWnuyUb9jNOHdN6TE9Mf5/hnTHj +oTleL7EENINHuCNlBYhCi1HA7GOpEtKcWQ0YoO+xyQbtRCXGPE9aOzG+Kw1owxWf +mfZ+o3okf2ZaukiQ2XAmkqf+hKJl1FsTm/KsRi8B1mcEKTclW2r2nOa8FlhhsO1x +3ZBp1KOR0kHbGRyy4eJtllry2KBI/tmITpqCYecdgvALtqIW+h5UJNylawyDHsL6 +Q/+txmt0q4fN0X1hEOMMcrsXztV46D9GZhpI9X5L5l7ggNSWldi6LdUPvuPmqp9B +7aZYYER6l5mg9QCkPteKtN1y/41TBAgtaT+/+FUzQmkQAaKrAoIBAQDFhM/Fn4Wf +ST0A8oB3XzRYf6MVJ6tR7L6hdHRgEmXOIERbJ9OU6QADvFgls5cal4ZxCO87mrZn +Rr4sQkFNiCHoU29IV6/QVH8fW7BnoJw3ITBP2Wgs6S/9nODL4QIbdVJIdJH2c2kg +lEUwbS5HTktRcReSDmcIf1qO9Z2g/MnAyW+31RPms3LcBK3vn8rtsUj/SttVVOX1 +iAf3IyoNqgUpsG7eVj6Tc73oL47zMP0ZONKzwA/50HnWQP7MCa77OvyGoZT82ppq +Y5UHnSXZtluHemdB+Z2OK3niwd7DPXEV3amlMvFKsxuu2cqkkoaBX7s1aPpgIkx4 +ti50IjbKHXX7AoIBADhlM128Onrw4+GJSDXrGW6EiMNt2oVEYvX3U/0YqW0blHbw +LZL5SGQ5y4MsH8t+lmoq5dWN+vjzjdE5eWX8s7QnT49996RpnrrMM+wLOBBUfNd0 +YVlKQVK1OmDdSbXwkiqDebgUREj0uH3hotV2x5Z4oIFnKGaeByyKZ9/z7Fiz7veW +TJoWbZ94+WEww0oB01g/HMxzZvI2leVPylUZrvRCNAeTqqWfwkcV5Gl9+fv6C63I +oC0LUnbINFiOGqQTjSFSBEU38yxExoxLRH0ljdqiau3ghBQotqqObQ0cT1G63iGQ +rFx/1KA1SU2jmQzQgHAV0Kt8YN90EkQgNlNYXOkCggEAZ3yTY6aV2wQDW1izKFgQ +VAHjzzSulUjmBC/AvYlGH75WMjBmsdF2OX7X7EDw/XTAcr7MoT0JLokpIIVCM74M +je4REyUmL4/l3ucqQNEsp9HSvzNYWpd+lnE4cnmcoghRKTcyNp73SKOGsL2zjpad +7bjEMbksEI6xQs+7W9q2VjT0PKv+NlR07IPjIfZl2y2U4nU0/7twlLlF+x1IbkpT +VCllnUYwmQ7+RAWO7yoOocVc1+LcO/YXr8Lz/LFiJa0dG+jS57wdRXqRXaDfcPcT +c6MVMML44sEypjUPYtnxQxSVSsGrHIlFCtJ/UsSWhnhC3NP4wp+V03UYV66JaFIR +OwKCAQAFCzsH9M47kT5gfX6Svw9AoKkiy96DdABSduRi08yn/wV3R9V3aQkhfyyX +TD+K9HRHvY+6Bd/GJnTAYvLz4XGfa7cCox59AyZmEtc6snKLCqdOn0LAK4X+le3t +xJTT3ZO9kCyCqviXc8cjSQYwYSEjievSUFhIVNqKChRri4iChXsC+XSzdgAhZNPL +aNEf1Su708OTX5Jk3LZD5U1gIwCOAjeB9tUZwpCQDKWAhQjkUXXafeKYt0LaG0GV +BQZ3QRP0tPjtqYWEJlqNQGbB4LZlKx0Ub4ABwQZZoJmkY1JP+QlIpi8lAoX1aVqI +60spDC9WjjzlFvoXZvtKOplaqmIx +-----END PRIVATE KEY-----""" + +# Create a mock certificate +mock_cert = MagicMock(spec=x509.Certificate) +# Add necessary attributes to the mock certificate +mock_cert.serial_number = 123456789 +mock_cert.not_valid_before = datetime.datetime(2020, 1, 1) +mock_cert.not_valid_after = datetime.datetime(2030, 1, 1) + +def mock_file_side_effect(*args, **kwargs): + filename = args[0] + if 'cert.pem' in filename: + return mock_open(read_data=MOCK_CERTIFICATE)() + elif 'privkey.pem' in filename: + return mock_open(read_data=MOCK_PRIVATE_KEY)() + elif 'chain.pem' in filename: + return mock_open(read_data=b'data')() + else: + return mock_open(read_data='data')() + +@pytest.fixture +def aws_mock(): + with mock_s3(), mock_secretsmanager(), mock_ssm(), mock_acm(), mock_sns(): + yield + +@mock_s3 +@mock_acm +@mock_sns +@patch('certbot.main.main') +@patch('src.index.os.remove') +@patch('src.index.x509.load_pem_x509_certificate', return_value=mock_cert) +def test_provision_cert_creates_objects_correctly_for_s3_storage(mock_load_pem, mock_remove, mock_certbot_main): + # Configure mock + mock_certbot_main.return_value = None + + mock_s3_client = boto3.client('s3') + mock_s3_client.create_bucket(Bucket='example-cert-bucket') + + mock_sns_client = boto3.client('sns') + mock_sns_client.create_topic(Name='example-topic') + + # Event details dont matter, function is triggered on + # a schedule and uses env detailsI provi + event = {} + context = {} + with patch('src.index.open', side_effect=mock_file_side_effect, create=True): + index.handler(event, context) + + # Assert the mock was called with expected arguments + mock_certbot_main.assert_called_once_with([ + 'certonly', '-n', '--agree-tos', '--email', 'email@example.com', + '--dns-route53', '-d', 'example.com', '--config-dir', '/tmp/config-dir/', + '--work-dir', '/tmp/work-dir/', '--logs-dir', '/tmp/logs-dir/', + '--preferred-chain', 'ISRG Root X1' + ]) + + response = mock_s3_client.list_objects_v2(Bucket='example-cert-bucket') + objects = response.get('Contents', []) + assert 'cert.pem' in [obj['Key'] for obj in objects] + obj = mock_s3_client.get_object(Bucket='example-cert-bucket', Key='cert.pem') + body = obj['Body'].read() + assert body == MOCK_CERTIFICATE + assert 'privkey.pem' in [obj['Key'] for obj in objects] + obj = mock_s3_client.get_object(Bucket='example-cert-bucket', Key='privkey.pem') + assert obj['Body'].read() == MOCK_PRIVATE_KEY + assert 'chain.pem' in [obj['Key'] for obj in objects] + obj = mock_s3_client.get_object(Bucket='example-cert-bucket', Key='chain.pem') + assert obj['Body'].read() == b'data' + +def test_function_errors_if_storage_s3_and_bucket_not_given(): + del os.environ['CERTIFICATE_BUCKET'] + + # Event details dont matter, function is triggered on + # a schedule and uses env detailsI provi + event = {} + context = {} + with patch('src.index.open', side_effect=mock_file_side_effect, create=True): + with pytest.raises(Exception) as e: + index.handler(event, context) + + # assert that the index.handler function raised an exception + # because the bucket was not provided + assert 'CERTIFICATE_BUCKET is not set' in str(e.value) + +@mock_acm +@mock_sns +@mock_secretsmanager +@patch('certbot.main.main') +@patch('src.index.os.remove') +@patch('src.index.x509.load_pem_x509_certificate', return_value=mock_cert) +def test_provision_cert_creates_secrets_correctl_for_secretsmanager_storage(mock_load_pem, mock_remove, mock_certbot_main): + # Configure mock + mock_certbot_main.return_value = None + + mock_sns_client = boto3.client('sns') + mock_sns_client.create_topic(Name='example-topic') + + os.environ['CERTIFICATE_STORAGE'] = 'secretsmanager' + os.environ['CERTIFICATE_SECRET_PATH'] = '/example/path/' + + # Event details dont matter, function is triggered on + # a schedule and uses env detailsI provi + event = {} + context = {} + with patch('src.index.open', side_effect=mock_file_side_effect, create=True): + index.handler(event, context) + + # Assert the mock was called with expected arguments + mock_certbot_main.assert_called_once_with([ + 'certonly', '-n', '--agree-tos', '--email', 'email@example.com', + '--dns-route53', '-d', 'example.com', '--config-dir', '/tmp/config-dir/', + '--work-dir', '/tmp/work-dir/', '--logs-dir', '/tmp/logs-dir/', + '--preferred-chain', 'ISRG Root X1' + ]) + + # verify the secrets were created and contain the expected values + secrets_client = boto3.client('secretsmanager') + response = secrets_client.get_secret_value(SecretId='/example/path/cert.pem') + assert response['SecretString'] == MOCK_CERTIFICATE.decode('utf-8') + response = secrets_client.get_secret_value(SecretId='/example/path/privkey.pem') + assert response['SecretString'] == MOCK_PRIVATE_KEY.decode('utf-8') + response = secrets_client.get_secret_value(SecretId='/example/path/chain.pem') + assert response['SecretString'] == 'data' + +def test_function_errors_if_storage_secretsmanager_and_path_not_given(): + os.environ['CERTIFICATE_STORAGE'] = 'secretsmanager' + del os.environ['CERTIFICATE_SECRET_PATH'] + + # Event details dont matter, function is triggered on + # a schedule and uses env detailsI provi + event = {} + context = {} + with patch('src.index.open', side_effect=mock_file_side_effect, create=True): + with pytest.raises(Exception) as e: + index.handler(event, context) + + # assert that the index.handler function raised an exception + # because the bucket was not provided + assert 'CERTIFICATE_SECRET_PATH is not set' in str(e.value) + +@mock_acm +@mock_sns +@mock_ssm +@patch('certbot.main.main') +@patch('src.index.os.remove') +@patch('src.index.x509.load_pem_x509_certificate', return_value=mock_cert) +def test_provision_cert_behaves_correctly_for_ssm_storage(mock_load_pem, mock_remove, mock_certbot_main): + # Configure mock + mock_certbot_main.return_value = None + + mock_sns_client = boto3.client('sns') + mock_sns_client.create_topic(Name='example-topic') + + os.environ['CERTIFICATE_STORAGE'] = 'ssm_secure' + os.environ['CERTIFICATE_PARAMETER_PATH'] = '/example/path/' + + # Event details dont matter, function is triggered on + # a schedule and uses env detailsI provi + event = {} + context = {} + with patch('src.index.open', side_effect=mock_file_side_effect, create=True): + index.handler(event, context) + + # Assert the mock was called with expected arguments + mock_certbot_main.assert_called_once_with([ + 'certonly', '-n', '--agree-tos', '--email', 'email@example.com', + '--dns-route53', '-d', 'example.com', '--config-dir', '/tmp/config-dir/', + '--work-dir', '/tmp/work-dir/', '--logs-dir', '/tmp/logs-dir/', + '--preferred-chain', 'ISRG Root X1' + ]) + + # verify the secrets were created and contain the expected values + ssm_client = boto3.client('ssm') + response = ssm_client.get_parameter(Name='/example/path/cert.pem', WithDecryption=True) + assert response['Parameter']['Value'] == MOCK_CERTIFICATE.decode('utf-8') + response = ssm_client.get_parameter(Name='/example/path/privkey.pem', WithDecryption=True) + assert response['Parameter']['Value'] == MOCK_PRIVATE_KEY.decode('utf-8') + response = ssm_client.get_parameter(Name='/example/path/chain.pem', WithDecryption=True) + assert response['Parameter']['Value'] == 'data' + +def test_function_errors_if_storage_ssm_and_path_not_given(): + os.environ['CERTIFICATE_STORAGE'] = 'ssm_secure' + del os.environ['CERTIFICATE_PARAMETER_PATH'] + + # Event details dont matter, function is triggered on + # a schedule and uses env detailsI provi + event = {} + context = {} + with patch('src.index.open', side_effect=mock_file_side_effect, create=True): + with pytest.raises(Exception) as e: + index.handler(event, context) + + # assert that the index.handler function raised an exception + # because the bucket was not provided + assert 'CERTIFICATE_PARAMETER_PATH is not set' in str(e.value) + +@patch('certbot.main.main') +def test_provision_cert_respects_dry_run_env_var(mock_certbot_main, aws_mock): + # Configure mock + mock_certbot_main.return_value = None + + # Set dry run to skip file operations since we are + # only testing the arguments passed to certbot + os.environ['DRY_RUN'] = 'True' + + # Event details dont matter, function is triggered on + # a schedule and uses env details + event = {} + context = {} + index.handler(event, context) + + # Assert the mock was called with expected arguments + mock_certbot_main.assert_called_once_with([ + 'certonly', '-n', '--agree-tos', '--email', 'email@example.com', + '--dns-route53', '-d', 'example.com', '--config-dir', '/tmp/config-dir/', + '--work-dir', '/tmp/work-dir/', '--logs-dir', '/tmp/logs-dir/', + '--preferred-chain', 'ISRG Root X1', '--dry-run' + ]) diff --git a/package.json b/package.json index ae98be48..9653b9ff 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,6 @@ "post-upgrade": "npx projen post-upgrade", "pre-compile": "npx projen pre-compile", "release": "npx projen release", - "release:v1": "npx projen release:v1", "test": "npx projen test", "test:watch": "npx projen test:watch", "unbump": "npx projen unbump", @@ -41,12 +40,11 @@ "devDependencies": { "@types/jest": "^27", "@types/node": "^16", - "@typescript-eslint/eslint-plugin": "^5", - "@typescript-eslint/parser": "^5", - "aws-cdk-lib": "2.86.0", + "@typescript-eslint/eslint-plugin": "^6", + "@typescript-eslint/parser": "^6", + "aws-cdk-lib": "2.106.1", "constructs": "10.0.5", "eslint": "^8", - "eslint-import-resolver-node": "^0.3.7", "eslint-import-resolver-typescript": "^2.7.1", "eslint-plugin-import": "^2.27.5", "jest": "^27", @@ -55,19 +53,20 @@ "jsii-diff": "^1.82.0", "jsii-docgen": "^3.8.31", "jsii-pacmak": "^1.82.0", + "jsii-rosetta": "1.x", "npm-check-updates": "^16", - "projen": "^0.71.120", + "projen": "^0.76.27", "standard-version": "^9", "ts-jest": "^27", "ts-node": "^10.9.1", "typescript": "^4.9.5" }, "peerDependencies": { - "aws-cdk-lib": "^2.86.0", + "aws-cdk-lib": "^2.106.1", "constructs": "^10.0.5" }, "dependencies": { - "@renovosolutions/cdk-library-one-time-event": "^2.0.48" + "@renovosolutions/cdk-library-one-time-event": "^2.1.125" }, "resolutions": { "@types/babel__traverse": "7.18.2", diff --git a/src/index.ts b/src/index.ts index dce11974..c6fc8fd1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -15,6 +15,27 @@ import { Stack, } from 'aws-cdk-lib'; import { Construct } from 'constructs'; +import { assignRequiredPoliciesToRole } from './required-policies'; +import { + // configureBucketStorage, + configureSecretsManagerStorage, + configureSSMStorage, +} from './storage-helpers'; + +export enum CertificateStorageType { + /** + * Store the certificate in AWS Secrets Manager + */ + SECRETS_MANAGER = 'secretsmanager', + /** + * Store the certificates in S3 + */ + S3 = 's3', + /** + * Store the certificates as a parameter in AWS Systems Manager Parameter Store with encryption + */ + SSM_SECURE = 'ssm_secure', +} export interface CertbotProps { /** @@ -119,6 +140,31 @@ export interface CertbotProps { * @default false */ readonly enableObjectDeletion?: boolean; + /** + * The method of storage for the resulting certificates. + * + * @default CertificateStorageType.S3 + */ + readonly certificateStorage?: CertificateStorageType; + /** + * The path to store the certificates in AWS Secrets Manager + * + * @default `/certbot/certificates/${letsencryptDomains.split(',')[0]}/` + */ + readonly secretsManagerPath?: string; + /** + * The path to store the certificates in AWS Systems Manager Parameter Store + * + * @default `/certbot/certificates/${letsencryptDomains.split(',')[0]}/` + */ + readonly ssmSecurePath?: string; + /** + * The KMS key to use for encryption of the certificates in Secrets Manager + * or Systems Manager Parameter Store + * + * @default AWS managed key + */ + readonly kmsKeyAlias?: string; } export class Certbot extends Construct { @@ -128,39 +174,6 @@ export class Certbot extends Construct { constructor(scope: Construct, id: string, props: CertbotProps) { super(scope, id); - if (props.hostedZoneNames === undefined && props.hostedZones === undefined) { - throw new Error('You must provide either hostedZoneNames or hostedZones'); - } - - let bucket: s3.Bucket; - - // Create a bucket if one is not provided - if (props.bucket === undefined) { - bucket = new s3.Bucket(this, 'bucket', { - objectOwnership: s3.ObjectOwnership.BUCKET_OWNER_PREFERRED, - removalPolicy: props.removalPolicy || RemovalPolicy.RETAIN, - autoDeleteObjects: props.enableObjectDeletion ?? false, - versioned: true, - lifecycleRules: [{ - enabled: true, - abortIncompleteMultipartUploadAfter: Duration.days(1), - }], - encryption: s3.BucketEncryption.S3_MANAGED, - enforceSSL: true, - blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, - }); - } else { - bucket = props.bucket; - } - - const functionDir = path.join(__dirname, '../function'); - - // Create an SNS topic if one is not provided and add the defined email to it - let snsTopic: sns.Topic = props.snsTopic ?? new sns.Topic(this, 'topic'); - if (props.snsTopic === undefined) { - snsTopic.addSubscription(new subscriptions.EmailSubscription(props.letsencryptEmail)); - } - // Set property defaults let layers: lambda.ILayerVersion[] = props.layers ?? []; let runOnDeploy: boolean = props.runOnDeploy ?? true; @@ -168,23 +181,15 @@ export class Certbot extends Construct { let enableInsights: boolean = props.enableInsights ?? false; let insightsARN: string = props.insightsARN ?? 'arn:aws:lambda:' + Stack.of(this).region + ':580247275435:layer:LambdaInsightsExtension:14'; - // Set up role policies - let managedPolicies = [iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole')]; - if (enableInsights) { - managedPolicies.push(iam.ManagedPolicy.fromAwsManagedPolicyName('CloudWatchLambdaInsightsExecutionRolePolicy')); - layers.push(lambda.LayerVersion.fromLayerVersionArn(this, 'insightsLayer', insightsARN)); + if (props.hostedZoneNames === undefined && props.hostedZones === undefined) { + throw new Error('You must provide either hostedZoneNames or hostedZones'); } - const snsPolicy = new iam.ManagedPolicy(this, 'snsPolicy', { - description: 'Allow the Certbot function to notify an SNS topic upon completion.', - statements: [ - new iam.PolicyStatement({ - effect: iam.Effect.ALLOW, - actions: ['sns:Publish'], - resources: [snsTopic.topicArn], - }), - ], - }); + // Create an SNS topic if one is not provided and add the defined email to it + let snsTopic: sns.Topic = props.snsTopic ?? new sns.Topic(this, 'topic'); + if (props.snsTopic === undefined) { + snsTopic.addSubscription(new subscriptions.EmailSubscription(props.letsencryptEmail)); + } let hostedZones:string[] = []; if (props.hostedZoneNames != undefined) { @@ -202,67 +207,42 @@ export class Certbot extends Construct { }); } - const r53Policy = new iam.ManagedPolicy(this, 'r53Policy', { - description: 'Allow the Certbot function to perform DNS verification.', - statements: [ - new iam.PolicyStatement({ - effect: iam.Effect.ALLOW, - actions: ['route53:ListHostedZones'], - resources: ['*'], - }), - new iam.PolicyStatement({ - effect: iam.Effect.ALLOW, - actions: [ - 'route53:GetChange', - 'route53:ChangeResourceRecordSets', - ], - resources: ['arn:aws:route53:::change/*'].concat(hostedZones), - }), - ], + const role = new iam.Role(this, 'role', { + assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'), }); - const acmPolicy = new iam.ManagedPolicy(this, 'acmPolicy', { - description: 'Allow the Certbot function to import and list certificates.', - statements: [ - new iam.PolicyStatement({ - effect: iam.Effect.ALLOW, - actions: [ - 'acm:ListCertificates', - 'acm:ImportCertificate', - ], - resources: ['*'], - }), - new iam.PolicyStatement({ - effect: iam.Effect.ALLOW, - actions: ['acm:DescribeCertificate'], - resources: ['arn:aws:acm:' + Stack.of(this).region + ':' + Stack.of(this).account + ':certificate/*'], - }), - ], + assignRequiredPoliciesToRole(this, { + role, + snsTopic, + hostedZones, }); - managedPolicies.push(snsPolicy); - managedPolicies.push(r53Policy); - managedPolicies.push(acmPolicy); - - const role = new iam.Role(this, 'role', { - assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'), - managedPolicies, - }); + const functionDir = path.join(__dirname, '../function/src'); - bucket.grantWrite(role); + const bundlingCmds = [ + 'mkdir -p /asset-output', + 'pip install -r /asset-input/requirements.txt -t /asset-output', + 'cp index.py /asset-output/index.py', + ]; // Create the Lambda function this.handler = new lambda.Function(this, 'handler', { - runtime: lambda.Runtime.PYTHON_3_8, + runtime: lambda.Runtime.PYTHON_3_10, role, - code: lambda.Code.fromAsset(functionDir + '/function.zip'), + code: lambda.Code.fromAsset(functionDir, { + bundling: { + image: lambda.Runtime.PYTHON_3_10.bundlingImage, + command: [ + 'bash', '-c', bundlingCmds.join(' && '), + ], + }, + }), handler: 'index.handler', functionName: props.functionName, description: functionDescription, environment: { LETSENCRYPT_DOMAINS: props.letsencryptDomains, LETSENCRYPT_EMAIL: props.letsencryptEmail, - CERTIFICATE_BUCKET: bucket.bucketName, OBJECT_PREFIX: props.objectPrefix || '', REISSUE_DAYS: (props.reIssueDays === undefined) ? '30' : String(props.reIssueDays), PREFERRED_CHAIN: props.preferredChain || 'None', @@ -272,6 +252,66 @@ export class Certbot extends Construct { timeout: props.timeout || Duration.seconds(180), }); + let bucket: s3.Bucket; + + if (props.bucket === undefined && (props.certificateStorage == CertificateStorageType.S3 || props.certificateStorage == undefined)) { + bucket = new s3.Bucket(this, 'bucket', { + objectOwnership: s3.ObjectOwnership.BUCKET_OWNER_PREFERRED, + removalPolicy: props.removalPolicy || RemovalPolicy.RETAIN, + autoDeleteObjects: props.enableObjectDeletion ?? false, + versioned: true, + lifecycleRules: [{ + enabled: true, + abortIncompleteMultipartUploadAfter: Duration.days(1), + }], + encryption: s3.BucketEncryption.S3_MANAGED, + enforceSSL: true, + blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, + }); + + bucket.grantReadWrite(this.handler); + this.handler.addEnvironment('CERTIFICATE_BUCKET', bucket.bucketName); + this.handler.addEnvironment('CERTIFICATE_STORAGE', 's3'); + } + + if (props.bucket && (props.certificateStorage == CertificateStorageType.S3 || props.certificateStorage == undefined)) { + bucket = props.bucket; + bucket.grantReadWrite(this.handler); + this.handler.addEnvironment('CERTIFICATE_BUCKET', bucket.bucketName); + this.handler.addEnvironment('CERTIFICATE_STORAGE', 's3'); + } + + if (props.certificateStorage == CertificateStorageType.SECRETS_MANAGER) { + this.handler.addEnvironment('CERTIFICATE_STORAGE', 'secretsmanager'); + this.handler.addEnvironment('CERTIFICATE_SECRET_PATH', props.secretsManagerPath || `/certbot/certificates/${props.letsencryptDomains.split(',')[0]}/`); + if (props.kmsKeyAlias) { + this.handler.addEnvironment('CUSTOM_KMS_KEY_ID', props.kmsKeyAlias); + } + configureSecretsManagerStorage(this, { + role, + secretsManagerPath: props.secretsManagerPath || `/certbot/certificates/${props.letsencryptDomains.split(',')[0]}/`, + kmsKeyAlias: props.kmsKeyAlias, + }); + }; + + if (props.certificateStorage == CertificateStorageType.SSM_SECURE) { + this.handler.addEnvironment('CERTIFICATE_STORAGE', 'ssm_secure'); + this.handler.addEnvironment('CERTIFICATE_PARAMETER_PATH', props.ssmSecurePath || `/certbot/certificates/${props.letsencryptDomains.split(',')[0]}/`); + if (props.kmsKeyAlias) { + this.handler.addEnvironment('CUSTOM_KMS_KEY_ID', props.kmsKeyAlias); + } + configureSSMStorage(this, { + role, + parameterStorePath: props.ssmSecurePath || `/certbot/certificates/${props.letsencryptDomains.split(',')[0]}/`, + kmsKeyAlias: props.kmsKeyAlias, + }); + } + + if (enableInsights) { + role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('CloudWatchLambdaInsightsExecutionRolePolicy')); + this.handler.addLayers(lambda.LayerVersion.fromLayerVersionArn(this, 'insightsLayer', insightsARN)); + } + // Add function triggers new events.Rule(this, 'trigger', { schedule: props.schedule || events.Schedule.cron({ minute: '0', hour: '0', weekDay: '1' }), diff --git a/src/required-policies.ts b/src/required-policies.ts new file mode 100644 index 00000000..1d6eb80b --- /dev/null +++ b/src/required-policies.ts @@ -0,0 +1,74 @@ +import { + aws_iam as iam, + aws_sns as sns, + Stack, +} from 'aws-cdk-lib'; +import { Construct } from 'constructs'; + +interface RequiredPoliciesProps { + /** + * The role to assign policies to + */ + readonly role: iam.Role; + /** + * The SNS topic to send notifications to + */ + readonly snsTopic: sns.Topic; + /** + * The hostedZones that will be required for DNS verification with certbot + */ + readonly hostedZones: string[]; +}; + +export function assignRequiredPoliciesToRole(scope: Construct, props: RequiredPoliciesProps): void { + props.role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole')); + + props.role.addManagedPolicy(new iam.ManagedPolicy(scope, 'snsPolicy', { + description: 'Allow the Certbot function to notify an SNS topic upon completion.', + statements: [ + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['sns:Publish'], + resources: [props.snsTopic.topicArn], + }), + ], + })); + + props.role.addManagedPolicy(new iam.ManagedPolicy(scope, 'r53Policy', { + description: 'Allow the Certbot function to perform DNS verification.', + statements: [ + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['route53:ListHostedZones'], + resources: ['*'], + }), + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: [ + 'route53:GetChange', + 'route53:ChangeResourceRecordSets', + ], + resources: ['arn:aws:route53:::change/*'].concat(props.hostedZones), + }), + ], + })); + + props.role.addManagedPolicy(new iam.ManagedPolicy(scope, 'acmPolicy', { + description: 'Allow the Certbot function to import and list certificates.', + statements: [ + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: [ + 'acm:ListCertificates', + 'acm:ImportCertificate', + ], + resources: ['*'], + }), + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['acm:DescribeCertificate'], + resources: ['arn:aws:acm:' + Stack.of(scope).region + ':' + Stack.of(scope).account + ':certificate/*'], + }), + ], + })); +}; \ No newline at end of file diff --git a/src/storage-helpers.ts b/src/storage-helpers.ts new file mode 100644 index 00000000..e8640014 --- /dev/null +++ b/src/storage-helpers.ts @@ -0,0 +1,97 @@ +import { + aws_iam as iam, + aws_kms as kms, +} from 'aws-cdk-lib'; +import { Construct } from 'constructs'; + +interface SecretsManagerStorageProps { + /** + * The role to attach the Secrets Manager policy to + */ + readonly role: iam.Role; + /** + * The path to store the certificates in AWS Secrets Manager + */ + readonly secretsManagerPath: string; + /** + * The KMS key alias to use for encryption of the certificates in Secrets Manager + * + * @default `alias/aws/secretsmanager` + */ + readonly kmsKeyAlias?: string; +}; + +export function configureSecretsManagerStorage(scope: Construct, props: SecretsManagerStorageProps): void { + const keyAlias = props.kmsKeyAlias || 'alias/aws/secretsmanager'; + const keyArn = kms.Alias.fromAliasName(scope, 'kmsKeyAlias', keyAlias).keyArn; + props.role.addManagedPolicy(new iam.ManagedPolicy(scope, 'secretsManagerPolicy', { + statements: [ + new iam.PolicyStatement({ + actions: [ + 'secretsmanager:CreateSecret', + 'secretsmanager:DeleteSecret', + 'secretsmanager:DescribeSecret', + 'secretsmanager:GetSecretValue', + 'secretsmanager:ListSecrets', + 'secretsmanager:PutSecretValue', + 'secretsmanager:UpdateSecret', + ], + resources: [ + `${props.secretsManagerPath}*`, + ], + }), + new iam.PolicyStatement({ + actions: [ + 'kms:Decrypt', + 'kms:Encrypt', + ], + resources: [ + keyArn, + ], + }), + ], + })); +} + +interface SsmStorageProps { + /** + * The role to attach the Secrets Manager policy to + */ + readonly role: iam.Role; + /** + * The path to store the certificates in Parameter Store + */ + readonly parameterStorePath: string; + /** + * The KMS key alias to use for encryption of the certificates in Secrets Manager + * + * @default `alias/aws/secretsmanager` + */ + readonly kmsKeyAlias?: string; +}; + +export function configureSSMStorage(scope: Construct, props: SsmStorageProps): void { + const keyAlias = props.kmsKeyAlias || 'alias/aws/ssm'; + const keyArn = kms.Alias.fromAliasName(scope, 'kmsKeyAlias', keyAlias).keyArn; + props.role.addManagedPolicy(new iam.ManagedPolicy(scope, 'ssmPolicy', { + statements: [ + new iam.PolicyStatement({ + actions: [ + 'ssm:PutParameter', + ], + resources: [ + `${props.parameterStorePath}*`, + ], + }), + new iam.PolicyStatement({ + actions: [ + 'kms:Decrypt', + 'kms:Encrypt', + ], + resources: [ + keyArn, + ], + }), + ], + })); +} \ No newline at end of file diff --git a/test/__snapshots__/certbot.test.ts.snap b/test/__snapshots__/certbot.test.ts.snap index 96475544..b65b592b 100644 --- a/test/__snapshots__/certbot.test.ts.snap +++ b/test/__snapshots__/certbot.test.ts.snap @@ -10,6 +10,1630 @@ Object { }, }, "Resources": Object { + "Certbot2acmPolicyC37CA3B3": Object { + "Properties": Object { + "Description": "Allow the Certbot function to import and list certificates.", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "acm:ListCertificates", + "acm:ImportCertificate", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": "acm:DescribeCertificate", + "Effect": "Allow", + "Resource": "arn:aws:acm:us-east-1:123456789012:certificate/*", + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot2bucket15AF13C6": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "BucketEncryption": Object { + "ServerSideEncryptionConfiguration": Array [ + Object { + "ServerSideEncryptionByDefault": Object { + "SSEAlgorithm": "AES256", + }, + }, + ], + }, + "LifecycleConfiguration": Object { + "Rules": Array [ + Object { + "AbortIncompleteMultipartUpload": Object { + "DaysAfterInitiation": 1, + }, + "Status": "Enabled", + }, + ], + }, + "OwnershipControls": Object { + "Rules": Array [ + Object { + "ObjectOwnership": "BucketOwnerPreferred", + }, + ], + }, + "PublicAccessBlockConfiguration": Object { + "BlockPublicAcls": true, + "BlockPublicPolicy": true, + "IgnorePublicAcls": true, + "RestrictPublicBuckets": true, + }, + "VersioningConfiguration": Object { + "Status": "Enabled", + }, + }, + "Type": "AWS::S3::Bucket", + "UpdateReplacePolicy": "Retain", + }, + "Certbot2bucketPolicyF5044957": Object { + "Properties": Object { + "Bucket": Object { + "Ref": "Certbot2bucket15AF13C6", + }, + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "s3:*", + "Condition": Object { + "Bool": Object { + "aws:SecureTransport": "false", + }, + }, + "Effect": "Deny", + "Principal": Object { + "AWS": "*", + }, + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "Certbot2bucket15AF13C6", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "Certbot2bucket15AF13C6", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::S3::BucketPolicy", + }, + "Certbot2handlerDD5B6BD6": Object { + "DependsOn": Array [ + "Certbot2roleDefaultPolicyD41BA24B", + "Certbot2role947EDF69", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": "cdk-hnb659fds-assets-123456789012-us-east-1", + "S3Key": "f7c1fa662639e65413cc49908488b904a27263a41e65391f6f19fcde3680b96c.zip", + }, + "Description": "Certbot Renewal Lambda for domain test2.local", + "Environment": Object { + "Variables": Object { + "CERTIFICATE_BUCKET": Object { + "Ref": "Certbot2bucket15AF13C6", + }, + "CERTIFICATE_STORAGE": "s3", + "LETSENCRYPT_DOMAINS": "test2.local, www.test2.local", + "LETSENCRYPT_EMAIL": "test@test2.local", + "NOTIFICATION_SNS_ARN": Object { + "Ref": "Certbot2topic395A9DCD", + }, + "OBJECT_PREFIX": "", + "PREFERRED_CHAIN": "None", + "REISSUE_DAYS": "30", + }, + }, + "Handler": "index.handler", + "Role": Object { + "Fn::GetAtt": Array [ + "Certbot2role947EDF69", + "Arn", + ], + }, + "Runtime": "python3.10", + "Timeout": 180, + }, + "Type": "AWS::Lambda::Function", + }, + "Certbot2r53Policy92D86BDE": Object { + "Properties": Object { + "Description": "Allow the Certbot function to perform DNS verification.", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "route53:ListHostedZones", + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "route53:GetChange", + "route53:ChangeResourceRecordSets", + ], + "Effect": "Allow", + "Resource": Array [ + "arn:aws:route53:::change/*", + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":route53:::hostedzone/DUMMY", + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":route53:::hostedzone/", + Object { + "Ref": "ZoneA5DE4B68", + }, + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot2role947EDF69": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + ], + ], + }, + Object { + "Ref": "Certbot2snsPolicy34AF5BB6", + }, + Object { + "Ref": "Certbot2r53Policy92D86BDE", + }, + Object { + "Ref": "Certbot2acmPolicyC37CA3B3", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "Certbot2roleDefaultPolicyD41BA24B": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", + "s3:DeleteObject*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", + "s3:Abort*", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "Certbot2bucket15AF13C6", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "Certbot2bucket15AF13C6", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "Certbot2roleDefaultPolicyD41BA24B", + "Roles": Array [ + Object { + "Ref": "Certbot2role947EDF69", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "Certbot2snsPolicy34AF5BB6": Object { + "Properties": Object { + "Description": "Allow the Certbot function to notify an SNS topic upon completion.", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sns:Publish", + "Effect": "Allow", + "Resource": Object { + "Ref": "Certbot2topic395A9DCD", + }, + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot2topic395A9DCD": Object { + "Type": "AWS::SNS::Topic", + }, + "Certbot2topictesttest2localAF8994D0": Object { + "Properties": Object { + "Endpoint": "test@test2.local", + "Protocol": "email", + "TopicArn": Object { + "Ref": "Certbot2topic395A9DCD", + }, + }, + "Type": "AWS::SNS::Subscription", + }, + "Certbot2triggerA0C0D9CA": Object { + "Properties": Object { + "ScheduleExpression": "cron(0 0 ? * 1 *)", + "State": "ENABLED", + "Targets": Array [ + Object { + "Arn": Object { + "Fn::GetAtt": Array [ + "Certbot2handlerDD5B6BD6", + "Arn", + ], + }, + "Id": "Target0", + }, + ], + }, + "Type": "AWS::Events::Rule", + }, + "Certbot2triggerAllowEventRuleTestStackCertbot2handler0C9B784E8CC7BD79": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "Certbot2handlerDD5B6BD6", + "Arn", + ], + }, + "Principal": "events.amazonaws.com", + "SourceArn": Object { + "Fn::GetAtt": Array [ + "Certbot2triggerA0C0D9CA", + "Arn", + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "Certbot2triggerImmediateAllowEventRuleTestStackCertbot2handler0C9B784E1442FE9C": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "Certbot2handlerDD5B6BD6", + "Arn", + ], + }, + "Principal": "events.amazonaws.com", + "SourceArn": Object { + "Fn::GetAtt": Array [ + "Certbot2triggerImmediateE4EA1F78", + "Arn", + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "Certbot2triggerImmediateE4EA1F78": Object { + "Properties": Object { + "ScheduleExpression": "cron(10 0 31 1 ? 2020)", + "State": "ENABLED", + "Targets": Array [ + Object { + "Arn": Object { + "Fn::GetAtt": Array [ + "Certbot2handlerDD5B6BD6", + "Arn", + ], + }, + "Id": "Target0", + }, + ], + }, + "Type": "AWS::Events::Rule", + }, + "Certbot3acmPolicyEB8711A3": Object { + "Properties": Object { + "Description": "Allow the Certbot function to import and list certificates.", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "acm:ListCertificates", + "acm:ImportCertificate", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": "acm:DescribeCertificate", + "Effect": "Allow", + "Resource": "arn:aws:acm:us-east-1:123456789012:certificate/*", + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot3handler209B83F5": Object { + "DependsOn": Array [ + "Certbot3role650AD6C3", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": "cdk-hnb659fds-assets-123456789012-us-east-1", + "S3Key": "f7c1fa662639e65413cc49908488b904a27263a41e65391f6f19fcde3680b96c.zip", + }, + "Description": "Certbot Renewal Lambda for domain test3.local", + "Environment": Object { + "Variables": Object { + "CERTIFICATE_SECRET_PATH": "/certbot/certificates/test3.local/", + "CERTIFICATE_STORAGE": "secretsmanager", + "LETSENCRYPT_DOMAINS": "test3.local, www.test3.local", + "LETSENCRYPT_EMAIL": "test@test3.local", + "NOTIFICATION_SNS_ARN": Object { + "Ref": "Certbot3topic1D6F86D3", + }, + "OBJECT_PREFIX": "", + "PREFERRED_CHAIN": "None", + "REISSUE_DAYS": "30", + }, + }, + "Handler": "index.handler", + "Role": Object { + "Fn::GetAtt": Array [ + "Certbot3role650AD6C3", + "Arn", + ], + }, + "Runtime": "python3.10", + "Timeout": 180, + }, + "Type": "AWS::Lambda::Function", + }, + "Certbot3r53Policy56156B49": Object { + "Properties": Object { + "Description": "Allow the Certbot function to perform DNS verification.", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "route53:ListHostedZones", + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "route53:GetChange", + "route53:ChangeResourceRecordSets", + ], + "Effect": "Allow", + "Resource": Array [ + "arn:aws:route53:::change/*", + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":route53:::hostedzone/DUMMY", + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":route53:::hostedzone/", + Object { + "Ref": "ZoneA5DE4B68", + }, + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot3role650AD6C3": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + ], + ], + }, + Object { + "Ref": "Certbot3snsPolicy1D9E6026", + }, + Object { + "Ref": "Certbot3r53Policy56156B49", + }, + Object { + "Ref": "Certbot3acmPolicyEB8711A3", + }, + Object { + "Ref": "Certbot3secretsManagerPolicy943A0ACD", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "Certbot3secretsManagerPolicy943A0ACD": Object { + "Properties": Object { + "Description": "", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "secretsmanager:CreateSecret", + "secretsmanager:DeleteSecret", + "secretsmanager:DescribeSecret", + "secretsmanager:GetSecretValue", + "secretsmanager:ListSecrets", + "secretsmanager:PutSecretValue", + "secretsmanager:UpdateSecret", + ], + "Effect": "Allow", + "Resource": "/certbot/certificates/test3.local/*", + }, + Object { + "Action": Array [ + "kms:Decrypt", + "kms:Encrypt", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":kms:us-east-1:123456789012:alias/aws/secretsmanager", + ], + ], + }, + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot3snsPolicy1D9E6026": Object { + "Properties": Object { + "Description": "Allow the Certbot function to notify an SNS topic upon completion.", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sns:Publish", + "Effect": "Allow", + "Resource": Object { + "Ref": "Certbot3topic1D6F86D3", + }, + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot3topic1D6F86D3": Object { + "Type": "AWS::SNS::Topic", + }, + "Certbot3topictesttest3local57C81B78": Object { + "Properties": Object { + "Endpoint": "test@test3.local", + "Protocol": "email", + "TopicArn": Object { + "Ref": "Certbot3topic1D6F86D3", + }, + }, + "Type": "AWS::SNS::Subscription", + }, + "Certbot3triggerAllowEventRuleTestStackCertbot3handler2F75392112ED02DD": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "Certbot3handler209B83F5", + "Arn", + ], + }, + "Principal": "events.amazonaws.com", + "SourceArn": Object { + "Fn::GetAtt": Array [ + "Certbot3triggerCFF93877", + "Arn", + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "Certbot3triggerCFF93877": Object { + "Properties": Object { + "ScheduleExpression": "cron(0 0 ? * 1 *)", + "State": "ENABLED", + "Targets": Array [ + Object { + "Arn": Object { + "Fn::GetAtt": Array [ + "Certbot3handler209B83F5", + "Arn", + ], + }, + "Id": "Target0", + }, + ], + }, + "Type": "AWS::Events::Rule", + }, + "Certbot3triggerImmediateAllowEventRuleTestStackCertbot3handler2F75392155692E82": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "Certbot3handler209B83F5", + "Arn", + ], + }, + "Principal": "events.amazonaws.com", + "SourceArn": Object { + "Fn::GetAtt": Array [ + "Certbot3triggerImmediateF94A9166", + "Arn", + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "Certbot3triggerImmediateF94A9166": Object { + "Properties": Object { + "ScheduleExpression": "cron(10 0 31 1 ? 2020)", + "State": "ENABLED", + "Targets": Array [ + Object { + "Arn": Object { + "Fn::GetAtt": Array [ + "Certbot3handler209B83F5", + "Arn", + ], + }, + "Id": "Target0", + }, + ], + }, + "Type": "AWS::Events::Rule", + }, + "Certbot4acmPolicy14C7C708": Object { + "Properties": Object { + "Description": "Allow the Certbot function to import and list certificates.", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "acm:ListCertificates", + "acm:ImportCertificate", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": "acm:DescribeCertificate", + "Effect": "Allow", + "Resource": "arn:aws:acm:us-east-1:123456789012:certificate/*", + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot4handler9E5C2F8B": Object { + "DependsOn": Array [ + "Certbot4roleCDF970B1", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": "cdk-hnb659fds-assets-123456789012-us-east-1", + "S3Key": "f7c1fa662639e65413cc49908488b904a27263a41e65391f6f19fcde3680b96c.zip", + }, + "Description": "Certbot Renewal Lambda for domain test4.local", + "Environment": Object { + "Variables": Object { + "CERTIFICATE_SECRET_PATH": "/certbot/certificates/test4.local/", + "CERTIFICATE_STORAGE": "secretsmanager", + "CUSTOM_KMS_KEY_ID": "alias/test", + "LETSENCRYPT_DOMAINS": "test4.local, www.test4.local", + "LETSENCRYPT_EMAIL": "test@test4.local", + "NOTIFICATION_SNS_ARN": Object { + "Ref": "Certbot4topic76531857", + }, + "OBJECT_PREFIX": "", + "PREFERRED_CHAIN": "None", + "REISSUE_DAYS": "30", + }, + }, + "Handler": "index.handler", + "Role": Object { + "Fn::GetAtt": Array [ + "Certbot4roleCDF970B1", + "Arn", + ], + }, + "Runtime": "python3.10", + "Timeout": 180, + }, + "Type": "AWS::Lambda::Function", + }, + "Certbot4r53Policy2214C19B": Object { + "Properties": Object { + "Description": "Allow the Certbot function to perform DNS verification.", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "route53:ListHostedZones", + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "route53:GetChange", + "route53:ChangeResourceRecordSets", + ], + "Effect": "Allow", + "Resource": Array [ + "arn:aws:route53:::change/*", + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":route53:::hostedzone/DUMMY", + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":route53:::hostedzone/", + Object { + "Ref": "ZoneA5DE4B68", + }, + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot4roleCDF970B1": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + ], + ], + }, + Object { + "Ref": "Certbot4snsPolicyD4A9E786", + }, + Object { + "Ref": "Certbot4r53Policy2214C19B", + }, + Object { + "Ref": "Certbot4acmPolicy14C7C708", + }, + Object { + "Ref": "Certbot4secretsManagerPolicy86953285", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "Certbot4secretsManagerPolicy86953285": Object { + "Properties": Object { + "Description": "", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "secretsmanager:CreateSecret", + "secretsmanager:DeleteSecret", + "secretsmanager:DescribeSecret", + "secretsmanager:GetSecretValue", + "secretsmanager:ListSecrets", + "secretsmanager:PutSecretValue", + "secretsmanager:UpdateSecret", + ], + "Effect": "Allow", + "Resource": "/certbot/certificates/test4.local/*", + }, + Object { + "Action": Array [ + "kms:Decrypt", + "kms:Encrypt", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":kms:us-east-1:123456789012:alias/test", + ], + ], + }, + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot4snsPolicyD4A9E786": Object { + "Properties": Object { + "Description": "Allow the Certbot function to notify an SNS topic upon completion.", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sns:Publish", + "Effect": "Allow", + "Resource": Object { + "Ref": "Certbot4topic76531857", + }, + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot4topic76531857": Object { + "Type": "AWS::SNS::Topic", + }, + "Certbot4topictesttest4localED1A0549": Object { + "Properties": Object { + "Endpoint": "test@test4.local", + "Protocol": "email", + "TopicArn": Object { + "Ref": "Certbot4topic76531857", + }, + }, + "Type": "AWS::SNS::Subscription", + }, + "Certbot4triggerAllowEventRuleTestStackCertbot4handlerAC6D89582016CDD4": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "Certbot4handler9E5C2F8B", + "Arn", + ], + }, + "Principal": "events.amazonaws.com", + "SourceArn": Object { + "Fn::GetAtt": Array [ + "Certbot4triggerF7B3A775", + "Arn", + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "Certbot4triggerF7B3A775": Object { + "Properties": Object { + "ScheduleExpression": "cron(0 0 ? * 1 *)", + "State": "ENABLED", + "Targets": Array [ + Object { + "Arn": Object { + "Fn::GetAtt": Array [ + "Certbot4handler9E5C2F8B", + "Arn", + ], + }, + "Id": "Target0", + }, + ], + }, + "Type": "AWS::Events::Rule", + }, + "Certbot4triggerImmediateA1AD5D75": Object { + "Properties": Object { + "ScheduleExpression": "cron(10 0 31 1 ? 2020)", + "State": "ENABLED", + "Targets": Array [ + Object { + "Arn": Object { + "Fn::GetAtt": Array [ + "Certbot4handler9E5C2F8B", + "Arn", + ], + }, + "Id": "Target0", + }, + ], + }, + "Type": "AWS::Events::Rule", + }, + "Certbot4triggerImmediateAllowEventRuleTestStackCertbot4handlerAC6D8958F5D23DCC": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "Certbot4handler9E5C2F8B", + "Arn", + ], + }, + "Principal": "events.amazonaws.com", + "SourceArn": Object { + "Fn::GetAtt": Array [ + "Certbot4triggerImmediateA1AD5D75", + "Arn", + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "Certbot5acmPolicy9282E578": Object { + "Properties": Object { + "Description": "Allow the Certbot function to import and list certificates.", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "acm:ListCertificates", + "acm:ImportCertificate", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": "acm:DescribeCertificate", + "Effect": "Allow", + "Resource": "arn:aws:acm:us-east-1:123456789012:certificate/*", + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot5handlerF08FFF65": Object { + "DependsOn": Array [ + "Certbot5roleF9851B9B", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": "cdk-hnb659fds-assets-123456789012-us-east-1", + "S3Key": "f7c1fa662639e65413cc49908488b904a27263a41e65391f6f19fcde3680b96c.zip", + }, + "Description": "Certbot Renewal Lambda for domain test5.local", + "Environment": Object { + "Variables": Object { + "CERTIFICATE_PARAMETER_PATH": "/certbot/certificates/test5.local/", + "CERTIFICATE_STORAGE": "ssm_secure", + "LETSENCRYPT_DOMAINS": "test5.local, www.test5.local", + "LETSENCRYPT_EMAIL": "test@test5.local", + "NOTIFICATION_SNS_ARN": Object { + "Ref": "Certbot5topic9F8D3AA7", + }, + "OBJECT_PREFIX": "", + "PREFERRED_CHAIN": "None", + "REISSUE_DAYS": "30", + }, + }, + "Handler": "index.handler", + "Role": Object { + "Fn::GetAtt": Array [ + "Certbot5roleF9851B9B", + "Arn", + ], + }, + "Runtime": "python3.10", + "Timeout": 180, + }, + "Type": "AWS::Lambda::Function", + }, + "Certbot5r53PolicyB6DCE7CB": Object { + "Properties": Object { + "Description": "Allow the Certbot function to perform DNS verification.", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "route53:ListHostedZones", + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "route53:GetChange", + "route53:ChangeResourceRecordSets", + ], + "Effect": "Allow", + "Resource": Array [ + "arn:aws:route53:::change/*", + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":route53:::hostedzone/DUMMY", + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":route53:::hostedzone/", + Object { + "Ref": "ZoneA5DE4B68", + }, + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot5roleF9851B9B": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + ], + ], + }, + Object { + "Ref": "Certbot5snsPolicy504027F9", + }, + Object { + "Ref": "Certbot5r53PolicyB6DCE7CB", + }, + Object { + "Ref": "Certbot5acmPolicy9282E578", + }, + Object { + "Ref": "Certbot5ssmPolicyA94F2710", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "Certbot5snsPolicy504027F9": Object { + "Properties": Object { + "Description": "Allow the Certbot function to notify an SNS topic upon completion.", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sns:Publish", + "Effect": "Allow", + "Resource": Object { + "Ref": "Certbot5topic9F8D3AA7", + }, + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot5ssmPolicyA94F2710": Object { + "Properties": Object { + "Description": "", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "ssm:PutParameter", + "Effect": "Allow", + "Resource": "/certbot/certificates/test5.local/*", + }, + Object { + "Action": Array [ + "kms:Decrypt", + "kms:Encrypt", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":kms:us-east-1:123456789012:alias/aws/ssm", + ], + ], + }, + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot5topic9F8D3AA7": Object { + "Type": "AWS::SNS::Topic", + }, + "Certbot5topictesttest5local5E1B5E3D": Object { + "Properties": Object { + "Endpoint": "test@test5.local", + "Protocol": "email", + "TopicArn": Object { + "Ref": "Certbot5topic9F8D3AA7", + }, + }, + "Type": "AWS::SNS::Subscription", + }, + "Certbot5triggerAllowEventRuleTestStackCertbot5handler0F02814B101C2FEC": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "Certbot5handlerF08FFF65", + "Arn", + ], + }, + "Principal": "events.amazonaws.com", + "SourceArn": Object { + "Fn::GetAtt": Array [ + "Certbot5triggerF1F8B5D8", + "Arn", + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "Certbot5triggerF1F8B5D8": Object { + "Properties": Object { + "ScheduleExpression": "cron(0 0 ? * 1 *)", + "State": "ENABLED", + "Targets": Array [ + Object { + "Arn": Object { + "Fn::GetAtt": Array [ + "Certbot5handlerF08FFF65", + "Arn", + ], + }, + "Id": "Target0", + }, + ], + }, + "Type": "AWS::Events::Rule", + }, + "Certbot5triggerImmediate3FF9395A": Object { + "Properties": Object { + "ScheduleExpression": "cron(10 0 31 1 ? 2020)", + "State": "ENABLED", + "Targets": Array [ + Object { + "Arn": Object { + "Fn::GetAtt": Array [ + "Certbot5handlerF08FFF65", + "Arn", + ], + }, + "Id": "Target0", + }, + ], + }, + "Type": "AWS::Events::Rule", + }, + "Certbot5triggerImmediateAllowEventRuleTestStackCertbot5handler0F02814B4258AD91": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "Certbot5handlerF08FFF65", + "Arn", + ], + }, + "Principal": "events.amazonaws.com", + "SourceArn": Object { + "Fn::GetAtt": Array [ + "Certbot5triggerImmediate3FF9395A", + "Arn", + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "Certbot6acmPolicy5052A88E": Object { + "Properties": Object { + "Description": "Allow the Certbot function to import and list certificates.", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "acm:ListCertificates", + "acm:ImportCertificate", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": "acm:DescribeCertificate", + "Effect": "Allow", + "Resource": "arn:aws:acm:us-east-1:123456789012:certificate/*", + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot6handlerD6A58872": Object { + "DependsOn": Array [ + "Certbot6role1843873F", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": "cdk-hnb659fds-assets-123456789012-us-east-1", + "S3Key": "f7c1fa662639e65413cc49908488b904a27263a41e65391f6f19fcde3680b96c.zip", + }, + "Description": "Certbot Renewal Lambda for domain test6.local", + "Environment": Object { + "Variables": Object { + "CERTIFICATE_PARAMETER_PATH": "/certbot/certificates/test6.local/", + "CERTIFICATE_STORAGE": "ssm_secure", + "CUSTOM_KMS_KEY_ID": "alias/test", + "LETSENCRYPT_DOMAINS": "test6.local, www.test6.local", + "LETSENCRYPT_EMAIL": "test@test6.local", + "NOTIFICATION_SNS_ARN": Object { + "Ref": "Certbot6topic26480D34", + }, + "OBJECT_PREFIX": "", + "PREFERRED_CHAIN": "None", + "REISSUE_DAYS": "30", + }, + }, + "Handler": "index.handler", + "Role": Object { + "Fn::GetAtt": Array [ + "Certbot6role1843873F", + "Arn", + ], + }, + "Runtime": "python3.10", + "Timeout": 180, + }, + "Type": "AWS::Lambda::Function", + }, + "Certbot6r53Policy647E091A": Object { + "Properties": Object { + "Description": "Allow the Certbot function to perform DNS verification.", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "route53:ListHostedZones", + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "route53:GetChange", + "route53:ChangeResourceRecordSets", + ], + "Effect": "Allow", + "Resource": Array [ + "arn:aws:route53:::change/*", + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":route53:::hostedzone/DUMMY", + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":route53:::hostedzone/", + Object { + "Ref": "ZoneA5DE4B68", + }, + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot6role1843873F": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + ], + ], + }, + Object { + "Ref": "Certbot6snsPolicy5FC3F235", + }, + Object { + "Ref": "Certbot6r53Policy647E091A", + }, + Object { + "Ref": "Certbot6acmPolicy5052A88E", + }, + Object { + "Ref": "Certbot6ssmPolicyA7CD83E3", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "Certbot6snsPolicy5FC3F235": Object { + "Properties": Object { + "Description": "Allow the Certbot function to notify an SNS topic upon completion.", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sns:Publish", + "Effect": "Allow", + "Resource": Object { + "Ref": "Certbot6topic26480D34", + }, + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot6ssmPolicyA7CD83E3": Object { + "Properties": Object { + "Description": "", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "ssm:PutParameter", + "Effect": "Allow", + "Resource": "/certbot/certificates/test6.local/*", + }, + Object { + "Action": Array [ + "kms:Decrypt", + "kms:Encrypt", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":kms:us-east-1:123456789012:alias/test", + ], + ], + }, + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "Certbot6topic26480D34": Object { + "Type": "AWS::SNS::Topic", + }, + "Certbot6topictesttest6local90838D49": Object { + "Properties": Object { + "Endpoint": "test@test6.local", + "Protocol": "email", + "TopicArn": Object { + "Ref": "Certbot6topic26480D34", + }, + }, + "Type": "AWS::SNS::Subscription", + }, + "Certbot6triggerAllowEventRuleTestStackCertbot6handler505405305E03955F": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "Certbot6handlerD6A58872", + "Arn", + ], + }, + "Principal": "events.amazonaws.com", + "SourceArn": Object { + "Fn::GetAtt": Array [ + "Certbot6triggerB07CAACF", + "Arn", + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "Certbot6triggerB07CAACF": Object { + "Properties": Object { + "ScheduleExpression": "cron(0 0 ? * 1 *)", + "State": "ENABLED", + "Targets": Array [ + Object { + "Arn": Object { + "Fn::GetAtt": Array [ + "Certbot6handlerD6A58872", + "Arn", + ], + }, + "Id": "Target0", + }, + ], + }, + "Type": "AWS::Events::Rule", + }, + "Certbot6triggerImmediate2E81CCDF": Object { + "Properties": Object { + "ScheduleExpression": "cron(10 0 31 1 ? 2020)", + "State": "ENABLED", + "Targets": Array [ + Object { + "Arn": Object { + "Fn::GetAtt": Array [ + "Certbot6handlerD6A58872", + "Arn", + ], + }, + "Id": "Target0", + }, + ], + }, + "Type": "AWS::Events::Rule", + }, + "Certbot6triggerImmediateAllowEventRuleTestStackCertbot6handler505405308F953C97": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "Certbot6handlerD6A58872", + "Arn", + ], + }, + "Principal": "events.amazonaws.com", + "SourceArn": Object { + "Fn::GetAtt": Array [ + "Certbot6triggerImmediate2E81CCDF", + "Arn", + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, "CertbotacmPolicy047B0647": Object { "Properties": Object { "Description": "Allow the Certbot function to import and list certificates.", @@ -132,7 +1756,7 @@ Object { "Properties": Object { "Code": Object { "S3Bucket": "cdk-hnb659fds-assets-123456789012-us-east-1", - "S3Key": "c99fc6a00a14f54079fc625de094b5468284f46eaf8dfdd8ff4f8cb540c9b52c.zip", + "S3Key": "f7c1fa662639e65413cc49908488b904a27263a41e65391f6f19fcde3680b96c.zip", }, "Description": "Certbot Renewal Lambda for domain test.local", "Environment": Object { @@ -140,6 +1764,7 @@ Object { "CERTIFICATE_BUCKET": Object { "Ref": "Certbotbucket4B0141F9", }, + "CERTIFICATE_STORAGE": "s3", "LETSENCRYPT_DOMAINS": "test.local, www.test.local", "LETSENCRYPT_EMAIL": "test@test.local", "NOTIFICATION_SNS_ARN": Object { @@ -157,7 +1782,7 @@ Object { "Arn", ], }, - "Runtime": "python3.8", + "Runtime": "python3.10", "Timeout": 180, }, "Type": "AWS::Lambda::Function", @@ -262,6 +1887,9 @@ Object { "Statement": Array [ Object { "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", @@ -377,7 +2005,7 @@ Object { }, "CertbottriggerImmediate08D06D4E": Object { "Properties": Object { - "ScheduleExpression": "cron(10 0 1 1 ? 2020)", + "ScheduleExpression": "cron(10 0 31 1 ? 2020)", "State": "ENABLED", "Targets": Array [ Object { @@ -412,6 +2040,49 @@ Object { }, "Type": "AWS::Lambda::Permission", }, + "KmsKey46693ADD": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "KeyPolicy": Object { + "Statement": Array [ + Object { + "Action": "kms:*", + "Effect": "Allow", + "Principal": Object { + "AWS": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::123456789012:root", + ], + ], + }, + }, + "Resource": "*", + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::KMS::Key", + "UpdateReplacePolicy": "Retain", + }, + "KmsKeyAlias513C0C4A": Object { + "Properties": Object { + "AliasName": "alias/test", + "TargetKeyId": Object { + "Fn::GetAtt": Array [ + "KmsKey46693ADD", + "Arn", + ], + }, + }, + "Type": "AWS::KMS::Alias", + }, "ZoneA5DE4B68": Object { "Properties": Object { "Name": "auth.test.local.", diff --git a/test/certbot.test.ts b/test/certbot.test.ts index bebc699b..31a257e8 100644 --- a/test/certbot.test.ts +++ b/test/certbot.test.ts @@ -1,6 +1,18 @@ -import { aws_s3 as s3, App, Stack, aws_route53 as route53 } from 'aws-cdk-lib'; -import { Template } from 'aws-cdk-lib/assertions'; -import { Certbot } from '../src/index'; +import { + aws_s3 as s3, + aws_kms as kms, + App, + Stack, + aws_route53 as route53, +} from 'aws-cdk-lib'; +import { + Template, + Match, +} from 'aws-cdk-lib/assertions'; +import { + Certbot, + CertificateStorageType, +} from '../src/index'; jest.setSystemTime(new Date('2020-01-01').getTime()); @@ -17,6 +29,12 @@ test('Snapshot', () => { zoneName: 'auth.test.local', }); + const kmsKey = new kms.Key(stack, 'KmsKey', {}); + const kmsKeyAlias = new kms.Alias(stack, 'KmsKeyAlias', { + aliasName: 'alias/test', + targetKey: kmsKey, + }); + new Certbot(stack, 'Certbot', { letsencryptDomains: 'test.local, www.test.local', letsencryptEmail: 'test@test.local', @@ -24,10 +42,51 @@ test('Snapshot', () => { hostedZones: [zone], }); + new Certbot(stack, 'Certbot2', { + letsencryptDomains: 'test2.local, www.test2.local', + letsencryptEmail: 'test@test2.local', + hostedZoneNames: ['example.com'], + hostedZones: [zone], + }); + + new Certbot(stack, 'Certbot3', { + letsencryptDomains: 'test3.local, www.test3.local', + letsencryptEmail: 'test@test3.local', + hostedZoneNames: ['example.com'], + hostedZones: [zone], + certificateStorage: CertificateStorageType.SECRETS_MANAGER, + }); + + new Certbot(stack, 'Certbot4', { + letsencryptDomains: 'test4.local, www.test4.local', + letsencryptEmail: 'test@test4.local', + hostedZoneNames: ['example.com'], + hostedZones: [zone], + certificateStorage: CertificateStorageType.SECRETS_MANAGER, + kmsKeyAlias: kmsKeyAlias.aliasName, + }); + + new Certbot(stack, 'Certbot5', { + letsencryptDomains: 'test5.local, www.test5.local', + letsencryptEmail: 'test@test5.local', + hostedZoneNames: ['example.com'], + hostedZones: [zone], + certificateStorage: CertificateStorageType.SSM_SECURE, + }); + + new Certbot(stack, 'Certbot6', { + letsencryptDomains: 'test6.local, www.test6.local', + letsencryptEmail: 'test@test6.local', + hostedZoneNames: ['example.com'], + hostedZones: [zone], + certificateStorage: CertificateStorageType.SSM_SECURE, + kmsKeyAlias: kmsKeyAlias.aliasName, + }); + expect(Template.fromStack(stack)).toMatchSnapshot(); }); -test('stack should contain specific number of expected resources', () => { +test('stack should contain specific number of expected resources when s3 is used', () => { const app = new App(); const stack = new Stack(app, 'TestStack', { env: { @@ -45,17 +104,268 @@ test('stack should contain specific number of expected resources', () => { letsencryptEmail: 'test@test.local', hostedZoneNames: ['test.local'], hostedZones: [zone], + certificateStorage: CertificateStorageType.S3, }); - Template.fromStack(stack).resourceCountIs('AWS::Lambda::Function', 1); - Template.fromStack(stack).resourceCountIs('AWS::Events::Rule', 2); // one for ongoing checks and one for immediate creation - Template.fromStack(stack).resourceCountIs('AWS::S3::Bucket', 1); - Template.fromStack(stack).resourceCountIs('AWS::IAM::ManagedPolicy', 3); // acm, sns, and r53 - Template.fromStack(stack).resourceCountIs('AWS::IAM::Policy', 1); // 1 inline policy for granting bucket write - Template.fromStack(stack).resourceCountIs('AWS::IAM::Role', 1); - Template.fromStack(stack).resourceCountIs('AWS::SNS::Topic', 1); - Template.fromStack(stack).resourceCountIs('AWS::SNS::Subscription', 1); - Template.fromStack(stack).resourceCountIs('AWS::Route53::HostedZone', 1); + const template = Template.fromStack(stack); + + template.resourceCountIs('AWS::Lambda::Function', 1); + template.resourceCountIs('AWS::Events::Rule', 2); // one for ongoing checks and one for immediate creation + template.resourceCountIs('AWS::S3::Bucket', 1); + template.resourceCountIs('AWS::IAM::ManagedPolicy', 3); // acm, sns, and r53 + template.resourceCountIs('AWS::IAM::Policy', 1); // 1 inline policy for granting bucket write + template.resourceCountIs('AWS::IAM::Role', 1); + template.resourceCountIs('AWS::SNS::Topic', 1); + template.resourceCountIs('AWS::SNS::Subscription', 1); + template.resourceCountIs('AWS::Route53::HostedZone', 1); +}); + +test('stack should contain specific number of expected resources when no storage type is specified', () => { + const app = new App(); + const stack = new Stack(app, 'TestStack', { + env: { + account: '123456789012', // not a real account + region: 'us-east-1', + }, + }); + + const zone = new route53.HostedZone(stack, 'Zone', { + zoneName: 'auth.test.local', + }); + + new Certbot(stack, 'Certbot', { + letsencryptDomains: 'test.local,auth.test.local', + letsencryptEmail: 'test@test.local', + hostedZoneNames: ['test.local'], + hostedZones: [zone], + certificateStorage: CertificateStorageType.S3, + }); + + const template = Template.fromStack(stack); + + template.resourceCountIs('AWS::Lambda::Function', 1); + template.resourceCountIs('AWS::Events::Rule', 2); // one for ongoing checks and one for immediate creation + template.resourceCountIs('AWS::S3::Bucket', 1); + template.resourceCountIs('AWS::IAM::ManagedPolicy', 3); // acm, sns, and r53 + template.resourceCountIs('AWS::IAM::Policy', 1); // 1 inline policy for granting bucket write + template.resourceCountIs('AWS::IAM::Role', 1); + template.resourceCountIs('AWS::SNS::Topic', 1); + template.resourceCountIs('AWS::SNS::Subscription', 1); + template.resourceCountIs('AWS::Route53::HostedZone', 1); +}); + +test('stack should contain no bucket when secrets manager is used and have appropriate policy', () => { + const app = new App(); + const stack = new Stack(app, 'TestStack', { + env: { + account: '123456789012', // not a real account + region: 'us-east-1', + }, + }); + + const zone = new route53.HostedZone(stack, 'Zone', { + zoneName: 'auth.test.local', + }); + + new Certbot(stack, 'Certbot', { + letsencryptDomains: 'test.local,auth.test.local', + letsencryptEmail: 'test@test.local', + hostedZoneNames: ['test.local'], + hostedZones: [zone], + certificateStorage: CertificateStorageType.SECRETS_MANAGER, + }); + + const template = Template.fromStack(stack); + + template.resourceCountIs('AWS::Lambda::Function', 1); + template.resourceCountIs('AWS::Events::Rule', 2); // one for ongoing checks and one for immediate creation + template.resourceCountIs('AWS::S3::Bucket', 0); + template.resourceCountIs('AWS::IAM::ManagedPolicy', 4); // acm, sns, and r53, secrets manager + template.hasResourceProperties('AWS::IAM::ManagedPolicy', Match.objectLike({ + PolicyDocument: { + Statement: Match.arrayWith([ + { + Action: Match.arrayWith([ + 'secretsmanager:CreateSecret', + 'secretsmanager:DeleteSecret', + 'secretsmanager:DescribeSecret', + 'secretsmanager:GetSecretValue', + 'secretsmanager:ListSecrets', + 'secretsmanager:PutSecretValue', + 'secretsmanager:UpdateSecret', + ]), + Effect: 'Allow', + Resource: Match.stringLikeRegexp('\/certbot\/certificates\/test.local\/.*'), + }, + { + Action: Match.arrayWith([ + 'kms:Decrypt', + 'kms:Encrypt', + ]), + Effect: 'Allow', + Resource: Match.anyValue(), + }, + ]), + }, + })); + template.resourceCountIs('AWS::IAM::Policy', 0); + template.resourceCountIs('AWS::IAM::Role', 1); + template.resourceCountIs('AWS::SNS::Topic', 1); + template.resourceCountIs('AWS::SNS::Subscription', 1); + template.resourceCountIs('AWS::Route53::HostedZone', 1); +}); + +test('stack should have policy with specific resource path when path is given for secrets manager', () => { + const app = new App(); + const stack = new Stack(app, 'TestStack', { + env: { + account: '123456789012', // not a real account + region: 'us-east-1', + }, + }); + + const zone = new route53.HostedZone(stack, 'Zone', { + zoneName: 'auth.test.local', + }); + + new Certbot(stack, 'Certbot', { + letsencryptDomains: 'test.local,auth.test.local', + letsencryptEmail: 'test@test.local', + hostedZoneNames: ['test.local'], + hostedZones: [zone], + certificateStorage: CertificateStorageType.SECRETS_MANAGER, + secretsManagerPath: '/certbot/alternate/path/', + }); + + const template = Template.fromStack(stack); + + template.hasResourceProperties('AWS::IAM::ManagedPolicy', Match.objectLike({ + PolicyDocument: { + Statement: Match.arrayWith([ + { + Action: Match.arrayWith([ + 'secretsmanager:CreateSecret', + 'secretsmanager:DeleteSecret', + 'secretsmanager:DescribeSecret', + 'secretsmanager:GetSecretValue', + 'secretsmanager:ListSecrets', + 'secretsmanager:PutSecretValue', + 'secretsmanager:UpdateSecret', + ]), + Effect: 'Allow', + Resource: Match.stringLikeRegexp('\/certbot\/alternate\/path\/.*'), + }, + { + Action: Match.arrayWith([ + 'kms:Decrypt', + 'kms:Encrypt', + ]), + Effect: 'Allow', + Resource: Match.anyValue(), + }, + ]), + }, + })); +}); + +test('stack should contain no bucket when parameter store is used and have appropriate policy', () => { + const app = new App(); + const stack = new Stack(app, 'TestStack', { + env: { + account: '123456789012', // not a real account + region: 'us-east-1', + }, + }); + + const zone = new route53.HostedZone(stack, 'Zone', { + zoneName: 'auth.test.local', + }); + + new Certbot(stack, 'Certbot', { + letsencryptDomains: 'test.local,auth.test.local', + letsencryptEmail: 'test@test.local', + hostedZoneNames: ['test.local'], + hostedZones: [zone], + certificateStorage: CertificateStorageType.SSM_SECURE, + }); + + const template = Template.fromStack(stack); + + template.resourceCountIs('AWS::Lambda::Function', 1); + template.resourceCountIs('AWS::Events::Rule', 2); // one for ongoing checks and one for immediate creation + template.resourceCountIs('AWS::S3::Bucket', 0); + template.resourceCountIs('AWS::IAM::ManagedPolicy', 4); // acm, sns, and r53, parameter store + // one of the policies should have a parameter store policy statement + template.hasResourceProperties('AWS::IAM::ManagedPolicy', Match.objectLike({ + PolicyDocument: { + Statement: Match.arrayWith([ + { + Action: 'ssm:PutParameter', + Effect: 'Allow', + Resource: Match.stringLikeRegexp('\/certbot\/certificates\/test.local\/.*'), + }, + { + Action: Match.arrayWith([ + 'kms:Decrypt', + 'kms:Encrypt', + ]), + Effect: 'Allow', + Resource: Match.anyValue(), + }, + ]), + }, + })); + template.resourceCountIs('AWS::IAM::Policy', 0); + template.resourceCountIs('AWS::IAM::Role', 1); + template.resourceCountIs('AWS::SNS::Topic', 1); + template.resourceCountIs('AWS::SNS::Subscription', 1); + template.resourceCountIs('AWS::Route53::HostedZone', 1); +}); + +test('stack should have policy with specific resource path when path is given for SSM', () => { + const app = new App(); + const stack = new Stack(app, 'TestStack', { + env: { + account: '123456789012', // not a real account + region: 'us-east-1', + }, + }); + + const zone = new route53.HostedZone(stack, 'Zone', { + zoneName: 'auth.test.local', + }); + + new Certbot(stack, 'Certbot', { + letsencryptDomains: 'test.local,auth.test.local', + letsencryptEmail: 'test@test.local', + hostedZoneNames: ['test.local'], + hostedZones: [zone], + certificateStorage: CertificateStorageType.SSM_SECURE, + ssmSecurePath: '/certbot/alternate/path/', + }); + + const template = Template.fromStack(stack); + + // one of the policies should have a parameter store policy statement + template.hasResourceProperties('AWS::IAM::ManagedPolicy', Match.objectLike({ + PolicyDocument: { + Statement: Match.arrayWith([ + { + Action: 'ssm:PutParameter', + Effect: 'Allow', + Resource: Match.stringLikeRegexp('\/certbot\/alternate\/path\/.*'), + }, + { + Action: Match.arrayWith([ + 'kms:Decrypt', + 'kms:Encrypt', + ]), + Effect: 'Allow', + Resource: Match.anyValue(), + }, + ]), + }, + })); }); test('construct should allow a bucket to be given as a prop', () => { @@ -76,14 +386,16 @@ test('construct should allow a bucket to be given as a prop', () => { bucket, }); - Template.fromStack(stack).resourceCountIs('AWS::Lambda::Function', 1); - Template.fromStack(stack).resourceCountIs('AWS::Events::Rule', 2); // one for ongoing checks and one for immediate creation - Template.fromStack(stack).resourceCountIs('AWS::S3::Bucket', 1); - Template.fromStack(stack).resourceCountIs('AWS::IAM::ManagedPolicy', 3); // acm, sns, and r53 - Template.fromStack(stack).resourceCountIs('AWS::IAM::Policy', 1); // 1 inline policy for granting bucket write - Template.fromStack(stack).resourceCountIs('AWS::IAM::Role', 1); - Template.fromStack(stack).resourceCountIs('AWS::SNS::Topic', 1); - Template.fromStack(stack).resourceCountIs('AWS::SNS::Subscription', 1); + const template = Template.fromStack(stack); + + template.resourceCountIs('AWS::Lambda::Function', 1); + template.resourceCountIs('AWS::Events::Rule', 2); // one for ongoing checks and one for immediate creation + template.resourceCountIs('AWS::S3::Bucket', 1); + template.resourceCountIs('AWS::IAM::ManagedPolicy', 3); // acm, sns, and r53 + template.resourceCountIs('AWS::IAM::Policy', 1); // 1 inline policy for granting bucket write + template.resourceCountIs('AWS::IAM::Role', 1); + template.resourceCountIs('AWS::SNS::Topic', 1); + template.resourceCountIs('AWS::SNS::Subscription', 1); }); test('construct should allow insights to be enabled', () => { @@ -102,14 +414,16 @@ test('construct should allow insights to be enabled', () => { enableInsights: true, }); - Template.fromStack(stack).resourceCountIs('AWS::Lambda::Function', 1); - Template.fromStack(stack).resourceCountIs('AWS::Events::Rule', 2); // one for ongoing checks and one for immediate creation - Template.fromStack(stack).resourceCountIs('AWS::S3::Bucket', 1); - Template.fromStack(stack).resourceCountIs('AWS::IAM::ManagedPolicy', 3); // acm, sns, and r53 - Template.fromStack(stack).resourceCountIs('AWS::IAM::Policy', 1); // 1 inline policy for granting bucket write - Template.fromStack(stack).resourceCountIs('AWS::IAM::Role', 1); - Template.fromStack(stack).resourceCountIs('AWS::SNS::Topic', 1); - Template.fromStack(stack).resourceCountIs('AWS::SNS::Subscription', 1); + const template = Template.fromStack(stack); + + template.resourceCountIs('AWS::Lambda::Function', 1); + template.resourceCountIs('AWS::Events::Rule', 2); // one for ongoing checks and one for immediate creation + template.resourceCountIs('AWS::S3::Bucket', 1); + template.resourceCountIs('AWS::IAM::ManagedPolicy', 3); // acm, sns, and r53 + template.resourceCountIs('AWS::IAM::Policy', 1); // 1 inline policy for granting bucket write + template.resourceCountIs('AWS::IAM::Role', 1); + template.resourceCountIs('AWS::SNS::Topic', 1); + template.resourceCountIs('AWS::SNS::Subscription', 1); }); test('disabling run on deploy should reduce total event rule count to 1', () => { @@ -128,14 +442,16 @@ test('disabling run on deploy should reduce total event rule count to 1', () => runOnDeploy: false, }); - Template.fromStack(stack).resourceCountIs('AWS::Lambda::Function', 1); - Template.fromStack(stack).resourceCountIs('AWS::Events::Rule', 1); // one for ongoing checks, none for immediate creation - Template.fromStack(stack).resourceCountIs('AWS::S3::Bucket', 1); - Template.fromStack(stack).resourceCountIs('AWS::IAM::ManagedPolicy', 3); // acm, sns, and r53 - Template.fromStack(stack).resourceCountIs('AWS::IAM::Policy', 1); // 1 inline policy for granting bucket write - Template.fromStack(stack).resourceCountIs('AWS::IAM::Role', 1); - Template.fromStack(stack).resourceCountIs('AWS::SNS::Topic', 1); - Template.fromStack(stack).resourceCountIs('AWS::SNS::Subscription', 1); + const template = Template.fromStack(stack); + + template.resourceCountIs('AWS::Lambda::Function', 1); + template.resourceCountIs('AWS::Events::Rule', 1); // one for ongoing checks, none for immediate creation + template.resourceCountIs('AWS::S3::Bucket', 1); + template.resourceCountIs('AWS::IAM::ManagedPolicy', 3); // acm, sns, and r53 + template.resourceCountIs('AWS::IAM::Policy', 1); // 1 inline policy for granting bucket write + template.resourceCountIs('AWS::IAM::Role', 1); + template.resourceCountIs('AWS::SNS::Topic', 1); + template.resourceCountIs('AWS::SNS::Subscription', 1); }); test('not providing zone names or zones should throw an error', () => { @@ -154,3 +470,33 @@ test('not providing zone names or zones should throw an error', () => { }); }).toThrowError('You must provide either hostedZoneNames or hostedZones'); }); + +test('Multiple certs in one stack does not error', () => { + const app = new App(); + const stack = new Stack(app, 'TestStack', { + env: { + account: '123456789012', // not a real account + region: 'us-east-1', + }, + }); + + const zone = new route53.HostedZone(stack, 'Zone', { + zoneName: 'auth.test.local', + }); + + expect(() => { + new Certbot(stack, 'Certbot', { + letsencryptDomains: 'test.local, www.test.local', + letsencryptEmail: 'test@test.local', + hostedZoneNames: ['example.com'], + hostedZones: [zone], + }); + + new Certbot(stack, 'Certbot2', { + letsencryptDomains: 'test2.local, www.test2.local', + letsencryptEmail: 'test@test2.local', + hostedZoneNames: ['example.com'], + hostedZones: [zone], + }); + }).not.toThrowError(); +}); diff --git a/yarn.lock b/yarn.lock index b7facbdb..c52c9be3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + "@ampproject/remapping@^2.2.0": version "2.2.1" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" @@ -10,172 +15,170 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@aws-cdk/asset-awscli-v1@^2.2.177": - version "2.2.185" - resolved "https://registry.yarnpkg.com/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.185.tgz#f5b53356689a0289953981366f5dd593ce1a72f3" - integrity sha512-cost0pu5nsmQmFhVxN4OonThGhgQeSlwntdXsEi5v8buVg+X4MzcXemmmSZxkkzzFCoS0r4w/7BiX1e+mMkFVA== +"@aws-cdk/asset-awscli-v1@^2.2.201": + version "2.2.201" + resolved "https://registry.yarnpkg.com/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.201.tgz#a7b51d3ecc8ff3ca9798269eda3a1db2400b506a" + integrity sha512-INZqcwDinNaIdb5CtW3ez5s943nX5stGBQS6VOP2JDlOFP81hM3fds/9NDknipqfUkZM43dx+HgVvkXYXXARCQ== -"@aws-cdk/asset-kubectl-v20@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.1.tgz#d01c1efb867fb7f2cfd8c8b230b8eae16447e156" - integrity sha512-U1ntiX8XiMRRRH5J1IdC+1t5CE89015cwyt5U63Cpk0GnMlN5+h9WsWMlKlPXZR4rdq/m806JRlBMRpBUB2Dhw== +"@aws-cdk/asset-kubectl-v20@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.2.tgz#d8e20b5f5dc20128ea2000dc479ca3c7ddc27248" + integrity sha512-3M2tELJOxQv0apCIiuKQ4pAbncz9GuLwnKFqxifWfe77wuMxyTRPmxssYHs42ePqzap1LT6GDcPygGs+hHstLg== -"@aws-cdk/asset-node-proxy-agent-v5@^2.0.148": - version "2.0.155" - resolved "https://registry.yarnpkg.com/@aws-cdk/asset-node-proxy-agent-v5/-/asset-node-proxy-agent-v5-2.0.155.tgz#b6541c56b21dbf1c5a5ba41bb144b0a827d23e2e" - integrity sha512-Q+Ny25hUPINlBbS6lmbUr4m6Tr6ToEJBla7sXA3FO3JUD0Z69ddcgbhuEBF8Rh1a2xmPONm89eX77kwK2fb4vQ== +"@aws-cdk/asset-node-proxy-agent-v6@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.0.1.tgz#6dc9b7cdb22ff622a7176141197962360c33e9ac" + integrity sha512-DDt4SLdLOwWCjGtltH4VCST7hpOI5DzieuhGZsBpZ+AgJdSI2GCjklCXm0GCTwJG/SolkL5dtQXyUKgg9luBDg== -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" - integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== dependencies: - "@babel/highlight" "^7.18.6" + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" -"@babel/compat-data@^7.22.0": - version "7.22.3" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.3.tgz#cd502a6a0b6e37d7ad72ce7e71a7160a3ae36f7e" - integrity sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ== +"@babel/compat-data@^7.22.9": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.3.tgz#3febd552541e62b5e883a25eb3effd7c7379db11" + integrity sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ== "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.22.1" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.1.tgz#5de51c5206f4c6f5533562838337a603c1033cfd" - integrity sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.3.tgz#5ec09c8803b91f51cc887dedc2654a35852849c9" + integrity sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.22.0" - "@babel/helper-compilation-targets" "^7.22.1" - "@babel/helper-module-transforms" "^7.22.1" - "@babel/helpers" "^7.22.0" - "@babel/parser" "^7.22.0" - "@babel/template" "^7.21.9" - "@babel/traverse" "^7.22.1" - "@babel/types" "^7.22.0" - convert-source-map "^1.7.0" + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.23.3" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.2" + "@babel/parser" "^7.23.3" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.3" + "@babel/types" "^7.23.3" + convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" + json5 "^2.2.3" + semver "^6.3.1" -"@babel/generator@^7.22.0", "@babel/generator@^7.22.3", "@babel/generator@^7.7.2": - version "7.22.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.3.tgz#0ff675d2edb93d7596c5f6728b52615cfc0df01e" - integrity sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A== +"@babel/generator@^7.23.3", "@babel/generator@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.3.tgz#86e6e83d95903fbe7613f448613b8b319f330a8e" + integrity sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg== dependencies: - "@babel/types" "^7.22.3" + "@babel/types" "^7.23.3" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.22.1": - version "7.22.1" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz#bfcd6b7321ffebe33290d68550e2c9d7eb7c7a58" - integrity sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ== +"@babel/helper-compilation-targets@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" + integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== dependencies: - "@babel/compat-data" "^7.22.0" - "@babel/helper-validator-option" "^7.21.0" - browserslist "^4.21.3" + "@babel/compat-data" "^7.22.9" + "@babel/helper-validator-option" "^7.22.15" + browserslist "^4.21.9" lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-environment-visitor@^7.22.1": - version "7.22.1" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz#ac3a56dbada59ed969d712cf527bd8271fe3eba8" - integrity sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA== - -"@babel/helper-function-name@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" - integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== - dependencies: - "@babel/template" "^7.20.7" - "@babel/types" "^7.21.0" - -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-imports@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" - integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== - dependencies: - "@babel/types" "^7.21.4" - -"@babel/helper-module-transforms@^7.22.1": - version "7.22.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz#e0cad47fedcf3cae83c11021696376e2d5a50c63" - integrity sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.1" - "@babel/helper-module-imports" "^7.21.4" - "@babel/helper-simple-access" "^7.21.5" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.21.9" - "@babel/traverse" "^7.22.1" - "@babel/types" "^7.22.0" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56" - integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg== - -"@babel/helper-simple-access@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz#d697a7971a5c39eac32c7e63c0921c06c8a249ee" - integrity sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg== - dependencies: - "@babel/types" "^7.21.5" - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-string-parser@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" - integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== - -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/helper-validator-option@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" - integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== - -"@babel/helpers@^7.22.0": - version "7.22.3" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.3.tgz#53b74351da9684ea2f694bf0877998da26dd830e" - integrity sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w== - dependencies: - "@babel/template" "^7.21.9" - "@babel/traverse" "^7.22.1" - "@babel/types" "^7.22.3" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" + semver "^6.3.1" + +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-imports@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/helper-validator-option@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" + integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== + +"@babel/helpers@^7.23.2": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767" + integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ== + dependencies: + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.2" + "@babel/types" "^7.23.0" + +"@babel/highlight@^7.22.13": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.9", "@babel/parser@^7.22.0", "@babel/parser@^7.22.4": - version "7.22.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.4.tgz#a770e98fd785c231af9d93f6459d36770993fb32" - integrity sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.3.tgz#0ce0be31a4ca4f1884b5786057cadcb6c3be58f9" + integrity sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -262,44 +265,44 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8" - integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - -"@babel/template@^7.20.7", "@babel/template@^7.21.9", "@babel/template@^7.3.3": - version "7.21.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.21.9.tgz#bf8dad2859130ae46088a99c1f265394877446fb" - integrity sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ== - dependencies: - "@babel/code-frame" "^7.21.4" - "@babel/parser" "^7.21.9" - "@babel/types" "^7.21.5" - -"@babel/traverse@^7.22.1", "@babel/traverse@^7.7.2": - version "7.22.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.4.tgz#c3cf96c5c290bd13b55e29d025274057727664c0" - integrity sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ== - dependencies: - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.22.3" - "@babel/helper-environment-visitor" "^7.22.1" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.22.4" - "@babel/types" "^7.22.4" + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/template@^7.22.15", "@babel/template@^7.3.3": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + +"@babel/traverse@^7.23.2", "@babel/traverse@^7.23.3", "@babel/traverse@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.3.tgz#26ee5f252e725aa7aca3474aa5b324eaf7908b5b" + integrity sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.23.3" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.3" + "@babel/types" "^7.23.3" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.22.0", "@babel/types@^7.22.3", "@babel/types@^7.22.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.22.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.4.tgz#56a2653ae7e7591365dabf20b76295410684c071" - integrity sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.3.tgz#d5ea892c07f2ec371ac704420f4dcdb07b5f9598" + integrity sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw== dependencies: - "@babel/helper-string-parser" "^7.21.5" - "@babel/helper-validator-identifier" "^7.19.1" + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" "@balena/dockerignore@^1.0.2": @@ -324,26 +327,26 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@eslint-community/eslint-utils@^4.2.0": +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" - integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331" - integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== +"@eslint/eslintrc@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.3.tgz#797470a75fe0fbd5a53350ee715e85e87baff22d" + integrity sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.5.2" + espree "^9.6.0" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -351,17 +354,22 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.41.0.tgz#080321c3b68253522f7646b55b577dd99d2950b3" - integrity sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA== +"@eslint/js@8.53.0": + version "8.53.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.53.0.tgz#bea56f2ed2b5baea164348ff4d5a879f6f81f20d" + integrity sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w== -"@humanwhocodes/config-array@^0.11.8": - version "0.11.8" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" - integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== +"@gar/promisify@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@humanwhocodes/config-array@^0.11.13": + version "0.11.13" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" + integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" + "@humanwhocodes/object-schema" "^2.0.1" debug "^4.1.1" minimatch "^3.0.5" @@ -370,10 +378,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" + integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== "@hutson/parse-repository-url@^3.0.0": version "3.0.2" @@ -591,12 +599,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/resolve-uri@^3.0.3": +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== @@ -606,12 +609,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/sourcemap-codec@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== @@ -625,25 +623,25 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" -"@jsii/check-node@1.82.0": - version "1.82.0" - resolved "https://registry.yarnpkg.com/@jsii/check-node/-/check-node-1.82.0.tgz#a3a7fc6bb6fea1843cb60ddd072a79f42c2b5379" - integrity sha512-7Djhxv+MZ80e/FAB7lT2vpQidzLDh6xcKTgA5JSuHMOJl4dylDR8g3Q06IZUrx5Hib6AmpmdTzHmosQFX0h80g== +"@jsii/check-node@1.91.0": + version "1.91.0" + resolved "https://registry.yarnpkg.com/@jsii/check-node/-/check-node-1.91.0.tgz#2beb99cf9c8a022d1444f524f4b7729a1bc91168" + integrity sha512-K9UFkRe4uJNVp1O2o4OBM/3usba6Vw3XF1Mq3TVBAYl1EzpAiA62DojGp30+3zwFlb1lkavVj1hKlCrIWIuJhw== dependencies: chalk "^4.1.2" - semver "^7.5.1" + semver "^7.5.4" -"@jsii/spec@1.82.0", "@jsii/spec@^1.44.0", "@jsii/spec@^1.82.0": - version "1.82.0" - resolved "https://registry.yarnpkg.com/@jsii/spec/-/spec-1.82.0.tgz#d2379f60e067bc9a3c92984be0cd3b8153e6e6f3" - integrity sha512-6+KHsKuRBBdIA17Rqcrw9WCcab3UkZAP/9xWZEu2sCpVUc3DMjadZS1QyVh4XMdIsJoQoaUjc8TuriloAkkr8Q== +"@jsii/spec@1.91.0", "@jsii/spec@^1.44.0", "@jsii/spec@^1.91.0": + version "1.91.0" + resolved "https://registry.yarnpkg.com/@jsii/spec/-/spec-1.91.0.tgz#91d624357a66148ab9a2d8b5fb26331fc7b01932" + integrity sha512-Ir01bk5CwIFAApRJjRC+JG/f9db5dACEYFSxsHyvXRMu+J/LIANdwD4OPSelWrhbRiQdY6U16BKsRO63uaNRqg== dependencies: ajv "^8.12.0" @@ -668,6 +666,14 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@npmcli/fs@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + "@npmcli/fs@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" @@ -697,6 +703,14 @@ npm-bundled "^3.0.0" npm-normalize-package-bin "^3.0.0" +"@npmcli/move-file@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + "@npmcli/node-gyp@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" @@ -775,28 +789,44 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@renovosolutions/cdk-library-one-time-event@^2.0.48": - version "2.1.120" - resolved "https://registry.yarnpkg.com/@renovosolutions/cdk-library-one-time-event/-/cdk-library-one-time-event-2.1.120.tgz#17d4695aa8fc4a9ff9e15256f6bf17e92245ef10" - integrity sha512-p6BEbygHIJ2LPtrIATOSnoXOeovt75yAfenFDxVQc1KDAxkMYth7j62Rw3F8l3wR+PvpUb6Q6zob5byRfOlc1A== +"@renovosolutions/cdk-library-one-time-event@^2.1.125": + version "2.1.125" + resolved "https://registry.yarnpkg.com/@renovosolutions/cdk-library-one-time-event/-/cdk-library-one-time-event-2.1.125.tgz#3e8e9d6ae376e1aaa96ecdd3a00af4deba1b1d52" + integrity sha512-9cuqUpndkTwJ3rmiAWFELCG7YH9Ygc9rBxSTORV2+tJLL4yOOKA3NY4B6TiubW/qJaBv8q7klvkmoyUEutQFaw== -"@sigstore/protobuf-specs@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz#957cb64ea2f5ce527cc9cf02a096baeb0d2b99b4" - integrity sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ== +"@sigstore/bundle@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-1.1.0.tgz#17f8d813b09348b16eeed66a8cf1c3d6bd3d04f1" + integrity sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog== + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" -"@sigstore/tuf@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.2.tgz#acbb2c8399fb03aca0c90fa1dc1934bda4160623" - integrity sha512-vjwcYePJzM01Ha6oWWZ9gNcdIgnzyFxfqfWzph483DPJTH8Tb7f7bQRRll3CYVkyH56j0AgcPAcl6Vg95DPF+Q== +"@sigstore/protobuf-specs@^0.2.0": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz#be9ef4f3c38052c43bd399d3f792c97ff9e2277b" + integrity sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A== + +"@sigstore/sign@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-1.0.0.tgz#6b08ebc2f6c92aa5acb07a49784cb6738796f7b4" + integrity sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA== dependencies: - "@sigstore/protobuf-specs" "^0.1.0" + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + make-fetch-happen "^11.0.1" + +"@sigstore/tuf@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.3.tgz#2a65986772ede996485728f027b0514c0b70b160" + integrity sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg== + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" tuf-js "^1.1.7" "@sindresorhus/is@^5.2.0": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.4.1.tgz#c4383ce702fb90531c3d310506bab89e70427c53" - integrity sha512-axlrvsHlHlFmKKMEg4VyvMzFr93JWJj4eIfXY1STVuO2fsImCa7ncaiG5gC8HKOX590AW5RtRsC41/B+OfrSqw== + version "5.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" + integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== "@sinonjs/commons@^1.7.0": version "1.8.6" @@ -863,9 +893,9 @@ minimatch "^9.0.0" "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b" - integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== + version "7.20.4" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.4.tgz#26a87347e6c6f753b3668398e34496d6d9ac6ac0" + integrity sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -874,16 +904,16 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + version "7.6.7" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" + integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -904,33 +934,33 @@ "@types/node" "*" "@types/graceful-fs@^4.1.2": - version "4.1.6" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" - integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" -"@types/http-cache-semantics@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== +"@types/http-cache-semantics@^4.0.2": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" @@ -942,10 +972,10 @@ jest-matcher-utils "^27.0.0" pretty-format "^27.0.0" -"@types/json-schema@^7.0.9": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== +"@types/json-schema@^7.0.12": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json5@^0.0.29": version "0.0.29" @@ -958,140 +988,148 @@ integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== "@types/node@*": - version "20.2.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.5.tgz#26d295f3570323b2837d322180dfbf1ba156fefb" - integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ== + version "20.9.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.0.tgz#bfcdc230583aeb891cf51e73cfdaacdd8deae298" + integrity sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw== + dependencies: + undici-types "~5.26.4" "@types/node@^16": - version "16.18.34" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.34.tgz#62d2099b30339dec4b1b04a14c96266459d7c8b2" - integrity sha512-VmVm7gXwhkUimRfBwVI1CHhwp86jDWR04B5FGebMMyxV90SlCmFujwUHrxTD4oO+SOYU86SoxvhgeRQJY7iXFg== + version "16.18.61" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.61.tgz#5ea47e3018348bf3bbbe646b396ba5e720310be1" + integrity sha512-k0N7BqGhJoJzdh6MuQg1V1ragJiXTh8VUBAZTWjJ9cUq23SG0F0xavOwZbhiP4J3y20xd6jxKx+xNUhkMAi76Q== "@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== "@types/prettier@2.6.0", "@types/prettier@^2.1.5": version "2.6.0" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.0.tgz#efcbd41937f9ae7434c714ab698604822d890759" integrity sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw== -"@types/semver@^7.3.12": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== +"@types/semver@^7.5.0": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.5.tgz#deed5ab7019756c9c90ea86139106b0346223f35" + integrity sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg== "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^16.0.0": - version "16.0.5" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.5.tgz#12cc86393985735a283e387936398c2f9e5f88e3" - integrity sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ== + version "16.0.8" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.8.tgz#0d57a5a491d85ae75d372a32e657b1779b86c65d" + integrity sha512-1GwLEkmFafeb/HbE6pC7tFlgYSQ4Iqh2qlWCq8xN+Qfaiaxr2PcLfuhfRFRYqI6XJyeFoLYyKnhFbNsst9FMtQ== dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5": - version "5.59.8" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.8.tgz#1e7a3e5318ece22251dfbc5c9c6feeb4793cc509" - integrity sha512-JDMOmhXteJ4WVKOiHXGCoB96ADWg9q7efPWHRViT/f09bA8XOMLAVHHju3l0MkZnG1izaWXYmgvQcUjTRcpShQ== +"@typescript-eslint/eslint-plugin@^6": + version "6.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.10.0.tgz#cfe2bd34e26d2289212946b96ab19dcad64b661a" + integrity sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg== dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.59.8" - "@typescript-eslint/type-utils" "5.59.8" - "@typescript-eslint/utils" "5.59.8" + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.10.0" + "@typescript-eslint/type-utils" "6.10.0" + "@typescript-eslint/utils" "6.10.0" + "@typescript-eslint/visitor-keys" "6.10.0" debug "^4.3.4" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5": - version "5.59.8" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.8.tgz#60cbb00671d86cf746044ab797900b1448188567" - integrity sha512-AnR19RjJcpjoeGojmwZtCwBX/RidqDZtzcbG3xHrmz0aHHoOcbWnpDllenRDmDvsV0RQ6+tbb09/kyc+UT9Orw== - dependencies: - "@typescript-eslint/scope-manager" "5.59.8" - "@typescript-eslint/types" "5.59.8" - "@typescript-eslint/typescript-estree" "5.59.8" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@^6": + version "6.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.10.0.tgz#578af79ae7273193b0b6b61a742a2bc8e02f875a" + integrity sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog== + dependencies: + "@typescript-eslint/scope-manager" "6.10.0" + "@typescript-eslint/types" "6.10.0" + "@typescript-eslint/typescript-estree" "6.10.0" + "@typescript-eslint/visitor-keys" "6.10.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.59.8": - version "5.59.8" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.8.tgz#ff4ad4fec6433647b817c4a7d4b4165d18ea2fa8" - integrity sha512-/w08ndCYI8gxGf+9zKf1vtx/16y8MHrZs5/tnjHhMLNSixuNcJavSX4wAiPf4aS5x41Es9YPCn44MIe4cxIlig== +"@typescript-eslint/scope-manager@6.10.0": + version "6.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.10.0.tgz#b0276118b13d16f72809e3cecc86a72c93708540" + integrity sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg== dependencies: - "@typescript-eslint/types" "5.59.8" - "@typescript-eslint/visitor-keys" "5.59.8" + "@typescript-eslint/types" "6.10.0" + "@typescript-eslint/visitor-keys" "6.10.0" -"@typescript-eslint/type-utils@5.59.8": - version "5.59.8" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.8.tgz#aa6c029a9d7706d26bbd25eb4666398781df6ea2" - integrity sha512-+5M518uEIHFBy3FnyqZUF3BMP+AXnYn4oyH8RF012+e7/msMY98FhGL5SrN29NQ9xDgvqCgYnsOiKp1VjZ/fpA== +"@typescript-eslint/type-utils@6.10.0": + version "6.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.10.0.tgz#1007faede067c78bdbcef2e8abb31437e163e2e1" + integrity sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg== dependencies: - "@typescript-eslint/typescript-estree" "5.59.8" - "@typescript-eslint/utils" "5.59.8" + "@typescript-eslint/typescript-estree" "6.10.0" + "@typescript-eslint/utils" "6.10.0" debug "^4.3.4" - tsutils "^3.21.0" + ts-api-utils "^1.0.1" -"@typescript-eslint/types@5.59.8": - version "5.59.8" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.8.tgz#212e54414733618f5d0fd50b2da2717f630aebf8" - integrity sha512-+uWuOhBTj/L6awoWIg0BlWy0u9TyFpCHrAuQ5bNfxDaZ1Ppb3mx6tUigc74LHcbHpOHuOTOJrBoAnhdHdaea1w== +"@typescript-eslint/types@6.10.0": + version "6.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.10.0.tgz#f4f0a84aeb2ac546f21a66c6e0da92420e921367" + integrity sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg== -"@typescript-eslint/typescript-estree@5.59.8": - version "5.59.8" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.8.tgz#801a7b1766481629481b3b0878148bd7a1f345d7" - integrity sha512-Jy/lPSDJGNow14vYu6IrW790p7HIf/SOV1Bb6lZ7NUkLc2iB2Z9elESmsaUtLw8kVqogSbtLH9tut5GCX1RLDg== +"@typescript-eslint/typescript-estree@6.10.0": + version "6.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz#667381eed6f723a1a8ad7590a31f312e31e07697" + integrity sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg== dependencies: - "@typescript-eslint/types" "5.59.8" - "@typescript-eslint/visitor-keys" "5.59.8" + "@typescript-eslint/types" "6.10.0" + "@typescript-eslint/visitor-keys" "6.10.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.59.8": - version "5.59.8" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.8.tgz#34d129f35a2134c67fdaf024941e8f96050dca2b" - integrity sha512-Tr65630KysnNn9f9G7ROF3w1b5/7f6QVCJ+WK9nhIocWmx9F+TmCAcglF26Vm7z8KCTwoKcNEBZrhlklla3CKg== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.59.8" - "@typescript-eslint/types" "5.59.8" - "@typescript-eslint/typescript-estree" "5.59.8" - eslint-scope "^5.1.1" - semver "^7.3.7" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.10.0": + version "6.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.10.0.tgz#4d76062d94413c30e402c9b0df8c14aef8d77336" + integrity sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.10.0" + "@typescript-eslint/types" "6.10.0" + "@typescript-eslint/typescript-estree" "6.10.0" + semver "^7.5.4" + +"@typescript-eslint/visitor-keys@6.10.0": + version "6.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.10.0.tgz#b9eaf855a1ac7e95633ae1073af43d451e8f84e3" + integrity sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg== + dependencies: + "@typescript-eslint/types" "6.10.0" + eslint-visitor-keys "^3.4.1" -"@typescript-eslint/visitor-keys@5.59.8": - version "5.59.8" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.8.tgz#aa6a7ef862add919401470c09e1609392ef3cc40" - integrity sha512-pJhi2ms0x0xgloT7xYabil3SGGlojNNKjK/q6dB3Ey0uJLMjK2UDGJvHieiyJVW/7C3KI+Z4Q3pEHkm4ejA+xQ== - dependencies: - "@typescript-eslint/types" "5.59.8" - eslint-visitor-keys "^3.3.0" +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -"@xmldom/xmldom@^0.8.7": - version "0.8.8" - resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.8.tgz#d0d11511cbc1de77e53342ad1546a4d487d6ea72" - integrity sha512-0LNz4EY8B/8xXY86wMrQ4tz6zEHZv9ehFMJPm8u2gq5lQ71cfRKdaKyxfJAx5aUoyzx0qzgURblTisPGgz3d+Q== +"@xmldom/xmldom@^0.8.10": + version "0.8.10" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" + integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== JSONStream@^1.0.4: version "1.3.5" @@ -1130,19 +1168,19 @@ acorn-walk@^7.1.1: integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + version "8.3.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f" + integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== acorn@^7.1.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4, acorn@^8.4.1, acorn@^8.8.0: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== +acorn@^8.2.4, acorn@^8.4.1, acorn@^8.9.0: + version "8.11.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== add-stream@^1.0.0: version "1.0.0" @@ -1157,12 +1195,10 @@ agent-base@6, agent-base@^6.0.2: debug "4" agentkeepalive@^4.2.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255" - integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg== + version "4.5.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== dependencies: - debug "^4.1.0" - depd "^2.0.0" humanize-ms "^1.2.1" aggregate-error@^3.0.0: @@ -1173,7 +1209,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1292,15 +1328,15 @@ array-ify@^1.0.0: resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== -array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== +array-includes@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" is-string "^1.0.7" array-timsort@^1.0.3: @@ -1313,26 +1349,50 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.flat@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" - integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== +array.prototype.findlastindex@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" -array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== +array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -1353,22 +1413,22 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -aws-cdk-lib@2.86.0: - version "2.86.0" - resolved "https://registry.yarnpkg.com/aws-cdk-lib/-/aws-cdk-lib-2.86.0.tgz#374f5096d6a0c4c98176bc3d4a8878e403cd11f7" - integrity sha512-76yZ2MawAGXLD3ox4FjhUIPmAMXteGKkeo3tPMthemusDCCkD2X6DBssXBHjB7r9GnrOMMf8JH5BGq2lOZ539g== +aws-cdk-lib@2.106.1: + version "2.106.1" + resolved "https://registry.yarnpkg.com/aws-cdk-lib/-/aws-cdk-lib-2.106.1.tgz#60456b5e6f3f9bcb50a331d6963e3b3047edb058" + integrity sha512-D+ZNbrxoCzmJ8+1d66TU4zaevvMa8Acb2DA5sx5CYwt3zXPPw8fJ9WOd376EGG6Ahn9Bwvmm0A6DHFsDRxG2ng== dependencies: - "@aws-cdk/asset-awscli-v1" "^2.2.177" - "@aws-cdk/asset-kubectl-v20" "^2.1.1" - "@aws-cdk/asset-node-proxy-agent-v5" "^2.0.148" + "@aws-cdk/asset-awscli-v1" "^2.2.201" + "@aws-cdk/asset-kubectl-v20" "^2.1.2" + "@aws-cdk/asset-node-proxy-agent-v6" "^2.0.1" "@balena/dockerignore" "^1.0.2" case "1.6.3" fs-extra "^11.1.1" ignore "^5.2.4" jsonschema "^1.4.1" minimatch "^3.1.2" - punycode "^2.3.0" - semver "^7.5.1" + punycode "^2.3.1" + semver "^7.5.4" table "^6.8.1" yaml "1.10.2" @@ -1439,9 +1499,9 @@ balanced-match@^1.0.0: integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== boxen@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-7.1.0.tgz#ba10a9ef4e73a9e220105b5f8c07a56d359a4cb4" - integrity sha512-ScG8CDo8dj7McqCZ5hz4dIBp20xj4unQ2lXIDa7ff6RcZElCpuNzutdwzKVvRikfNjm7CFAlR3HJHcoHkDOExQ== + version "7.1.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-7.1.1.tgz#f9ba525413c2fec9cdb88987d835c4f7cad9c8f4" + integrity sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog== dependencies: ansi-align "^3.0.1" camelcase "^7.0.1" @@ -1479,15 +1539,15 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.21.3: - version "4.21.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.7.tgz#e2b420947e5fb0a58e8f4668ae6e23488127e551" - integrity sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA== +browserslist@^4.21.9: + version "4.22.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" + integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== dependencies: - caniuse-lite "^1.0.30001489" - electron-to-chromium "^1.4.411" - node-releases "^2.0.12" - update-browserslist-db "^1.0.11" + caniuse-lite "^1.0.30001541" + electron-to-chromium "^1.4.535" + node-releases "^2.0.13" + update-browserslist-db "^1.0.13" bs-logger@0.x: version "0.2.6" @@ -1515,16 +1575,40 @@ builtins@^5.0.0: dependencies: semver "^7.0.0" +cacache@^16.1.0: + version "16.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^2.0.0" + cacache@^17.0.0: - version "17.1.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.3.tgz#c6ac23bec56516a7c0c52020fd48b4909d7c7044" - integrity sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg== + version "17.1.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35" + integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== dependencies: "@npmcli/fs" "^3.1.0" fs-minipass "^3.0.0" glob "^10.2.2" lru-cache "^7.7.1" - minipass "^5.0.0" + minipass "^7.0.3" minipass-collect "^1.0.2" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" @@ -1539,25 +1623,26 @@ cacheable-lookup@^7.0.0: integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== cacheable-request@^10.2.8: - version "10.2.12" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.12.tgz#05b97a3199d1ee65c360eb45c5af6191faa3ab6b" - integrity sha512-qtWGB5kn2OLjx47pYUkWicyOpK1vy9XZhq8yRTXOy+KAmjjESSRLx6SiExnnaGGUP1NM6/vmygMu0fGylNh9tw== + version "10.2.14" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.14.tgz#eb915b665fda41b79652782df3f553449c406b9d" + integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== dependencies: - "@types/http-cache-semantics" "^4.0.1" + "@types/http-cache-semantics" "^4.0.2" get-stream "^6.0.1" http-cache-semantics "^4.1.1" - keyv "^4.5.2" + keyv "^4.5.3" mimic-response "^4.0.0" normalize-url "^8.0.0" responselike "^3.0.0" -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" callsites@^3.0.0: version "3.1.0" @@ -1588,17 +1673,17 @@ camelcase@^7.0.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== -caniuse-lite@^1.0.30001489: - version "1.0.30001492" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001492.tgz#4a06861788a52b4c81fd3344573b68cc87fe062b" - integrity sha512-2efF8SAZwgAX1FJr87KWhvuJxnGJKOnctQa8xLOskAXNXq8oiuqgl6u1kk3fFpsp3GgvzlRjiK1sl63hNtFADw== +caniuse-lite@^1.0.30001541: + version "1.0.30001561" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz#752f21f56f96f1b1a52e97aae98c57c562d5d9da" + integrity sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw== case@1.6.3, case@^1.6.3: version "1.6.3" resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== -chalk@^2.0.0, chalk@^2.4.2: +chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1615,7 +1700,7 @@ chalk@^4, chalk@^4.0.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.0.1, chalk@^5.2.0: +chalk@^5.0.1, chalk@^5.2.0, chalk@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== @@ -1631,14 +1716,14 @@ chownr@^2.0.0: integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" - integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + version "1.2.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== clean-stack@^2.0.0: version "2.2.0" @@ -1687,19 +1772,19 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== -codemaker@^1.82.0: - version "1.82.0" - resolved "https://registry.yarnpkg.com/codemaker/-/codemaker-1.82.0.tgz#ad38e31a88402f4d8d082fbc8011896aaa65ef67" - integrity sha512-urr9UZD4HvuKj0fKZg480N5+TtSk2LNX5Dw7e/mOCOtSWxrUBlGN10s+AucBigUMX2ROUIJmbflIIXALs7ZS7Q== +codemaker@^1.91.0: + version "1.91.0" + resolved "https://registry.yarnpkg.com/codemaker/-/codemaker-1.91.0.tgz#edb5403510e9ed42400b79c73394234f341dab1d" + integrity sha512-yI9ibYUBdJDI8n5Vffd4kfg7mSy6Fes2FHq3/TrZtqhL5CJcXvI8Lltl6iTWM5f1JkeIeAMQOC45PjscBhWyZg== dependencies: camelcase "^6.3.0" decamelize "^5.0.1" fs-extra "^10.1.0" collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== color-convert@^1.9.0: version "1.9.3" @@ -1737,7 +1822,7 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -commander@^10.0.0: +commander@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== @@ -1815,6 +1900,11 @@ constructs@10.0.5: resolved "https://registry.yarnpkg.com/constructs/-/constructs-10.0.5.tgz#48c0402f1b98bbf5664efff74a8015e6e8a9f41e" integrity sha512-IwOwekzrASFC3qt4ozCtV09rteAIAesuCGsW0p+uBfqHd2XcvA5CXqJjgf4eUqm6g8e/noXlVCMDWwC8GaLtrg== +constructs@^10.0.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-10.3.0.tgz#4c246fce9cf8e77711ad45944e9fbd41f1501965" + integrity sha512-vbK8i3rIb/xwZxSpTjz3SagHn1qq9BChLEfy5Hf6fB3/2eFbrwt2n9kHwQcS0CPTRBesreeAcsJfMq2229FnbQ== + conventional-changelog-angular@^5.0.12: version "5.0.13" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" @@ -1978,11 +2068,16 @@ conventional-recommended-bump@6.1.0: meow "^8.0.0" q "^1.5.1" -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.4.0, convert-source-map@^1.6.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + core-util-is@^1.0.3, core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" @@ -2104,7 +2199,7 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deep-is@^0.1.3, deep-is@~0.1.3: +deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== @@ -2119,11 +2214,21 @@ defer-to-connect@^2.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: + define-data-property "^1.0.1" has-property-descriptors "^1.0.0" object-keys "^1.1.1" @@ -2137,11 +2242,6 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -depd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" @@ -2227,10 +2327,10 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -electron-to-chromium@^1.4.411: - version "1.4.416" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.416.tgz#7291f704168d3842ae4da3ae9fdc7bfbeb97d116" - integrity sha512-AUYh0XDTb2vrj0rj82jb3P9hHSyzQNdTPYWZIhPdCOui7/vpme7+HTE07BE5jwuqg/34TZ8ktlRz6GImJ4IXjA== +electron-to-chromium@^1.4.535: + version "1.4.581" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.581.tgz#23b684c67bf56d4284e95598c05a5d266653b6d8" + integrity sha512-6uhqWBIapTJUxgPTCHH9sqdbxIMPt7oXl0VcAL1kOtlU6aECdcMncCrX5Z7sHQ/invtrC9jUQUef7+HhO8vVFw== emittery@^0.8.1: version "0.8.1" @@ -2276,25 +2376,26 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.21.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" - integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== +es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.0" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" internal-slot "^1.0.5" is-array-buffer "^3.0.2" is-callable "^1.2.7" @@ -2302,35 +2403,39 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" is-string "^1.0.7" - is-typed-array "^1.1.10" + is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.9" + which-typed-array "^1.1.13" es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" + get-intrinsic "^1.2.2" has-tostringtag "^1.0.0" + hasown "^2.0.0" es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== dependencies: - has "^1.0.3" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -2367,25 +2472,24 @@ escape-string-regexp@^4.0.0: integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== dependencies: esprima "^4.0.1" estraverse "^5.2.0" esutils "^2.0.2" - optionator "^0.8.1" optionalDependencies: source-map "~0.6.1" -eslint-import-resolver-node@^0.3.7: - version "0.3.7" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" - integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== dependencies: debug "^3.2.7" - is-core-module "^2.11.0" - resolve "^1.22.1" + is-core-module "^2.13.0" + resolve "^1.22.4" eslint-import-resolver-typescript@^2.7.1: version "2.7.1" @@ -2398,7 +2502,7 @@ eslint-import-resolver-typescript@^2.7.1: resolve "^1.22.0" tsconfig-paths "^3.14.1" -eslint-module-utils@^2.7.4: +eslint-module-utils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== @@ -2406,68 +2510,63 @@ eslint-module-utils@^2.7.4: debug "^3.2.7" eslint-plugin-import@^2.27.5: - version "2.27.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" - integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== - dependencies: - array-includes "^3.1.6" - array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.1" + version "2.29.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155" + integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg== + dependencies: + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.7" - eslint-module-utils "^2.7.4" - has "^1.0.3" - is-core-module "^2.11.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.8.0" + hasown "^2.0.0" + is-core-module "^2.13.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.values "^1.1.6" - resolve "^1.22.1" - semver "^6.3.0" - tsconfig-paths "^3.14.1" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" + semver "^6.3.1" + tsconfig-paths "^3.14.2" -eslint-scope@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" - integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" - integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8: - version "8.41.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.41.0.tgz#3062ca73363b4714b16dbc1e60f035e6134b6f1c" - integrity sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q== + version "8.53.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.53.0.tgz#14f2c8244298fcae1f46945459577413ba2697ce" + integrity sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag== dependencies: "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.0.3" - "@eslint/js" "8.41.0" - "@humanwhocodes/config-array" "^0.11.8" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.3" + "@eslint/js" "8.53.0" + "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.2.0" - eslint-visitor-keys "^3.4.1" - espree "^9.5.2" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -2477,7 +2576,6 @@ eslint@^8: globals "^13.19.0" graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" @@ -2487,17 +2585,16 @@ eslint@^8: lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" + optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.5.2: - version "9.5.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" - integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^8.8.0" + acorn "^8.9.0" acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" @@ -2520,11 +2617,6 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" @@ -2575,21 +2667,10 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.12: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-glob@^3.2.9: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" - integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== +fast-glob@^3.2.9, fast-glob@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -2607,7 +2688,7 @@ fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== @@ -2683,17 +2764,18 @@ find-up@^4.0.0, find-up@^4.1.0: path-exists "^4.0.0" flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + version "3.1.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.1.tgz#a02a15fdec25a8f844ff7cc658f03dd99eb4609b" + integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q== dependencies: - flatted "^3.1.0" + flatted "^3.2.9" + keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.1.0, flatted@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== +flatted@^3.2.7, flatted@^3.2.9: + version "3.2.9" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" + integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== for-each@^0.3.3: version "0.3.3" @@ -2724,10 +2806,10 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -fp-and-or@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/fp-and-or/-/fp-and-or-0.1.3.tgz#e6fba83872a5853a56b3ebdf8d3167f5dfca1882" - integrity sha512-wJaE62fLaB3jCYvY2ZHjZvmKK2iiLiiehX38rz5QZxtdN8fVPJDeZUiVvJrHStdTc+23LHlyZuSEKgFc0pxi2g== +fp-and-or@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/fp-and-or/-/fp-and-or-0.1.4.tgz#0268c800c359ede259cdcbc352654e698b7ea299" + integrity sha512-+yRYRhpnFPWXSly/6V4Lw9IfOV26uu30kynGJ03PW+MnjOEQe45RZ141QcS0aJehYBYA50GfCDnsRbFJdhssRw== fs-extra@^10.0.0, fs-extra@^10.1.0: version "10.1.0" @@ -2756,7 +2838,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^2.0.0: +fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== @@ -2764,11 +2846,11 @@ fs-minipass@^2.0.0: minipass "^3.0.0" fs-minipass@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.2.tgz#5b383858efa8c1eb8c33b39e994f7e8555b8b3a3" - integrity sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g== + version "3.0.3" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== dependencies: - minipass "^5.0.0" + minipass "^7.0.3" fs.realpath@^1.0.0: version "1.0.0" @@ -2776,26 +2858,26 @@ fs.realpath@^1.0.0: integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" -functions-have-names@^1.2.2, functions-have-names@^1.2.3: +functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== @@ -2824,15 +2906,15 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-package-type@^0.1.0: version "0.1.0" @@ -2922,16 +3004,16 @@ glob-promise@^3.4.0: dependencies: "@types/glob" "*" -glob@^10.2.2, glob@^10.2.5: - version "10.3.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.1.tgz#9789cb1b994515bedb811a6deca735b5c37d2bf4" - integrity sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw== +glob@^10.2.2, glob@^10.3.7: + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== dependencies: foreground-child "^3.1.0" - jackspeak "^2.0.3" + jackspeak "^2.3.5" minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2" - path-scurry "^1.10.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: version "7.2.3" @@ -2945,7 +3027,7 @@ glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8: +glob@^8, glob@^8.0.1: version "8.1.0" resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== @@ -2969,9 +3051,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: - version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + version "13.23.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" + integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== dependencies: type-fest "^0.20.2" @@ -3028,23 +3110,18 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== dependencies: minimist "^1.2.5" - neo-async "^2.6.0" + neo-async "^2.6.2" source-map "^0.6.1" wordwrap "^1.0.0" optionalDependencies: @@ -3076,11 +3153,11 @@ has-own-prop@^2.0.0: integrity sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ== has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" @@ -3109,12 +3186,12 @@ has-yarn@^3.0.0: resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-3.0.0.tgz#c3c21e559730d1d3b57e28af1f30d06fac38147d" integrity sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA== -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: - function-bind "^1.1.1" + function-bind "^1.1.2" hosted-git-info@^2.1.4: version "2.8.9" @@ -3154,7 +3231,7 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-cache-semantics@^4.1.1: +http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== @@ -3178,9 +3255,9 @@ http-proxy-agent@^5.0.0: debug "4" http2-wrapper@^2.1.10: - version "2.2.0" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3" - integrity sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ== + version "2.2.1" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" + integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== dependencies: quick-lru "^5.1.1" resolve-alpn "^1.2.0" @@ -3231,7 +3308,7 @@ ignore@^5.2.0, ignore@^5.2.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -3262,6 +3339,11 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -3285,18 +3367,18 @@ ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -ini@^4.0.0: +ini@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1" integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + get-intrinsic "^1.2.2" + hasown "^2.0.0" side-channel "^1.0.4" interpret@^1.0.0: @@ -3350,12 +3432,12 @@ is-ci@^3.0.1: dependencies: ci-info "^3.2.0" -is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.8.1: - version "2.12.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== +is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0, is-core-module@^2.8.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-date-object@^1.0.1: version "1.0.5" @@ -3482,16 +3564,12 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.10, is-typed-array@^1.1.9: - version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" + which-typed-array "^1.1.11" is-typedarray@^1.0.0: version "1.0.0" @@ -3510,6 +3588,11 @@ is-yarn-global@^0.4.0: resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.4.1.tgz#b312d902b313f81e4eaf98b6361ba2b45cd694bb" integrity sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ== +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -3521,9 +3604,9 @@ isexe@^2.0.0: integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: version "5.2.1" @@ -3537,12 +3620,12 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: semver "^6.3.0" istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" + make-dir "^4.0.0" supports-color "^7.1.0" istanbul-lib-source-maps@^4.0.0: @@ -3555,17 +3638,17 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" - integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + version "3.1.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" + integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jackspeak@^2.0.3: - version "2.2.1" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6" - integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw== +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: @@ -4050,14 +4133,14 @@ jsesc@^2.5.1: integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsii-diff@^1.82.0: - version "1.82.0" - resolved "https://registry.yarnpkg.com/jsii-diff/-/jsii-diff-1.82.0.tgz#0498a91003536960cc401761290d5efee0236586" - integrity sha512-A2JHCMt5b/MZzFxyUwzOHyAXgeOqfAdWZSpe054lSfUc7hmtZap+mHrU7Tfy0CcKfyegy6q+Hy7kBoRYdbIKMg== + version "1.91.0" + resolved "https://registry.yarnpkg.com/jsii-diff/-/jsii-diff-1.91.0.tgz#8004353e46615222ccf5a7fe4580a22839bb49e2" + integrity sha512-WZkxTWuFI4QswU8DWu3v8pRfjOkp6A38KE3HtNPjp4QyIOSuhHYfZyd1wrIozeFxeKebfDH5YOu8/cL4JlVqUQ== dependencies: - "@jsii/check-node" "1.82.0" - "@jsii/spec" "^1.82.0" + "@jsii/check-node" "1.91.0" + "@jsii/spec" "^1.91.0" fs-extra "^10.1.0" - jsii-reflect "^1.82.0" + jsii-reflect "^1.91.0" log4js "^6.9.1" yargs "^16.2.0" @@ -4077,70 +4160,70 @@ jsii-docgen@^3.8.31: yargs "^16.2.0" jsii-pacmak@^1.82.0: - version "1.82.0" - resolved "https://registry.yarnpkg.com/jsii-pacmak/-/jsii-pacmak-1.82.0.tgz#6a7fdded1af46268ff0034ce8184ce5a79744e80" - integrity sha512-2Nck/HUElL/JLD1TjGrCyLxRKm9xrysT1qUi9eQKN+kZTsdcJNtiN0EsX+77ibq9YQzcKj8H98Gnskg3BL3KTg== + version "1.91.0" + resolved "https://registry.yarnpkg.com/jsii-pacmak/-/jsii-pacmak-1.91.0.tgz#44e414b1eb699f3d732bbe53cc6cc6da5fdb60b8" + integrity sha512-k3Mc8v2nS7OTZxbwXczjSl5/RzGXHPq/BzZ+MRQhP5Z0Ai7QDF++aJxx6GZT9JXOD8zpHpv74QOr6eLPRVRIEQ== dependencies: - "@jsii/check-node" "1.82.0" - "@jsii/spec" "^1.82.0" + "@jsii/check-node" "1.91.0" + "@jsii/spec" "^1.91.0" clone "^2.1.2" - codemaker "^1.82.0" + codemaker "^1.91.0" commonmark "^0.30.0" escape-string-regexp "^4.0.0" fs-extra "^10.1.0" - jsii-reflect "^1.82.0" - jsii-rosetta "^1.82.0" - semver "^7.5.1" - spdx-license-list "^6.6.0" + jsii-reflect "^1.91.0" + jsii-rosetta "^1.91.0" + semver "^7.5.4" + spdx-license-list "^6.7.0" xmlbuilder "^15.1.1" yargs "^16.2.0" -jsii-reflect@^1.44.0, jsii-reflect@^1.82.0: - version "1.82.0" - resolved "https://registry.yarnpkg.com/jsii-reflect/-/jsii-reflect-1.82.0.tgz#0d98ecabd4273c1c8bcf03350f845bad24b87be8" - integrity sha512-23lYPizIqmBC0CqX9iKdWrYUVVxRxUf/OJMXNnjGQ6UCa62QHPUbqEmKES/0jSmV3oIouwx/ePi5PE1529TucQ== +jsii-reflect@^1.44.0, jsii-reflect@^1.91.0: + version "1.91.0" + resolved "https://registry.yarnpkg.com/jsii-reflect/-/jsii-reflect-1.91.0.tgz#026e1c4e8ed51c21787098dd5cd5240ac5c438ce" + integrity sha512-RRFmvscXiBHUOP9ew71gPQ2IptiHYoRaihKoLg5+SQSeCvynaJrBWhNcBy26LHd28HEN2atdzYems0+HgeQNRg== dependencies: - "@jsii/check-node" "1.82.0" - "@jsii/spec" "^1.82.0" + "@jsii/check-node" "1.91.0" + "@jsii/spec" "^1.91.0" chalk "^4" fs-extra "^10.1.0" - oo-ascii-tree "^1.82.0" + oo-ascii-tree "^1.91.0" yargs "^16.2.0" -jsii-rosetta@^1.44.0, jsii-rosetta@^1.82.0: - version "1.82.0" - resolved "https://registry.yarnpkg.com/jsii-rosetta/-/jsii-rosetta-1.82.0.tgz#8680af6223ada85a247731e036cf4fc3220b90e3" - integrity sha512-3R/+fYm1gIUp6HEBzRyvHgCxKy1BZB2ZqO+0zYvgi7LEUEsvn7OBUDI7NoVe6/Bqp8DKOxzUYm4xe8jJ6Gr0og== +jsii-rosetta@1.x, jsii-rosetta@^1.44.0, jsii-rosetta@^1.91.0: + version "1.91.0" + resolved "https://registry.yarnpkg.com/jsii-rosetta/-/jsii-rosetta-1.91.0.tgz#0bc915b25949da6e455de638e1c8f6a20aa7d054" + integrity sha512-v8eW/XiJHklnkmTtCIbyAeDPUVfovU/ZNh1ixvGri/ps5H3iRRpLEmqGJGMm2IEIjNCSmnmIsDMQLw20/7Nu+Q== dependencies: - "@jsii/check-node" "1.82.0" - "@jsii/spec" "1.82.0" - "@xmldom/xmldom" "^0.8.7" + "@jsii/check-node" "1.91.0" + "@jsii/spec" "1.91.0" + "@xmldom/xmldom" "^0.8.10" commonmark "^0.30.0" - fast-glob "^3.2.12" - jsii "1.82.0" - semver "^7.5.1" + fast-glob "^3.3.1" + jsii "1.91.0" + semver "^7.5.4" semver-intersect "^1.4.0" - stream-json "^1.7.5" + stream-json "^1.8.0" typescript "~3.9.10" - workerpool "^6.4.0" + workerpool "^6.5.1" yargs "^16.2.0" -jsii@1.82.0, jsii@1.x: - version "1.82.0" - resolved "https://registry.yarnpkg.com/jsii/-/jsii-1.82.0.tgz#dbc5d61853619a0fb7653539663832ae1c2bf2a5" - integrity sha512-EMOjpWCiRYCo5ZzndGXsSsMrBSj4sa7njzEcFWryVnXj6reVP2axwsa3AXC/xCf4/PjchESxGDbSieX7cP9A+A== +jsii@1.91.0, jsii@1.x: + version "1.91.0" + resolved "https://registry.yarnpkg.com/jsii/-/jsii-1.91.0.tgz#55ae8c036c6547590b5e93e9eeace2c7b78ec461" + integrity sha512-dJ2FbnUfX5Eg9BdZx6Cz2JhDsvzGi2DoQeomzdjO9ltvVUouAFPWkpcUtJdLXaNmHQtPM4/I+AzelUX7w2mWVw== dependencies: - "@jsii/check-node" "1.82.0" - "@jsii/spec" "^1.82.0" + "@jsii/check-node" "1.91.0" + "@jsii/spec" "^1.91.0" case "^1.6.3" chalk "^4" fast-deep-equal "^3.1.3" fs-extra "^10.1.0" log4js "^6.9.1" - semver "^7.5.1" + semver "^7.5.4" semver-intersect "^1.4.0" sort-json "^2.0.1" - spdx-license-list "^6.6.0" + spdx-license-list "^6.7.0" typescript "~3.9.10" yargs "^16.2.0" @@ -4191,7 +4274,7 @@ json-stringify-safe@^5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@2.x, json5@^2.2.2: +json5@2.x, json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -4234,10 +4317,10 @@ jsonschema@^1.4.1: resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== -keyv@^4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" - integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -4276,14 +4359,6 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -4390,23 +4465,47 @@ lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== "lru-cache@^9.1.1 || ^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61" - integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw== + version "10.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.2.tgz#34504678cc3266b09b8dfd6fab4e1515258271b7" + integrity sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg== + dependencies: + semver "^7.3.5" -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== dependencies: - semver "^6.0.0" + semver "^7.5.3" make-error@1.x, make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.0.3, make-fetch-happen@^11.1.1: +make-fetch-happen@^10.0.3: + version "10.2.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" + +make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.1: version "11.1.1" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== @@ -4530,10 +4629,10 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.0, minimatch@^9.0.1: - version "9.0.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.2.tgz#397e387fff22f6795844d00badc903a3d5de7057" - integrity sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg== +minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== dependencies: brace-expansion "^2.0.1" @@ -4558,12 +4657,23 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" +minipass-fetch@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== + dependencies: + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + minipass-fetch@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.3.tgz#d9df70085609864331b533c960fd4ffaa78d15ce" - integrity sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ== + version "3.0.4" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" + integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== dependencies: - minipass "^5.0.0" + minipass "^7.0.3" minipass-sized "^1.0.3" minizlib "^2.1.2" optionalDependencies: @@ -4598,27 +4708,22 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@^3.0.0: +minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: version "3.3.6" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" -minipass@^4.0.0: - version "4.2.8" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" - integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== - minipass@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minipass@^5.0.0 || ^6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81" - integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" @@ -4648,11 +4753,6 @@ ms@^2.0.0, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -4663,21 +4763,21 @@ negotiator@^0.6.3: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.6.0: +neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== node-gyp@^9.0.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.0.tgz#2a7a91c7cba4eccfd95e949369f27c9ba704f369" - integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg== + version "9.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.1.tgz#8a1023e0d6766ecb52764cc3a734b36ff275e185" + integrity sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ== dependencies: env-paths "^2.2.0" exponential-backoff "^3.1.1" glob "^7.1.4" graceful-fs "^4.2.6" - make-fetch-happen "^11.0.3" + make-fetch-happen "^10.0.3" nopt "^6.0.0" npmlog "^6.0.0" rimraf "^3.0.2" @@ -4690,10 +4790,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.12: - version "2.0.12" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" - integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== +node-releases@^2.0.13: + version "2.0.13" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" + integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== nopt@^6.0.0: version "6.0.0" @@ -4750,45 +4850,47 @@ npm-bundled@^3.0.0: npm-normalize-package-bin "^3.0.0" npm-check-updates@^16: - version "16.10.13" - resolved "https://registry.yarnpkg.com/npm-check-updates/-/npm-check-updates-16.10.13.tgz#2a8b095d07ce34759c7f044423fb35e939e1d6d8" - integrity sha512-ZsWrtHnaMkcxAaCtDFEr8i7jgM0Bz2AYsnsJlmxISgltG8ie43bWC6G9icxFKfYSLeJJtcj/Yw1Mq5f8GL2F3g== + version "16.14.6" + resolved "https://registry.yarnpkg.com/npm-check-updates/-/npm-check-updates-16.14.6.tgz#8a1b743398795e66b427ac31f9a73fe2704045d6" + integrity sha512-sJ6w4AmSDP7YzBXah94Ul2JhiIbjBDfx9XYgib15um2wtiQkOyjE7Lov3MNUSQ84Ry7T81mE4ynMbl/mGbK4HQ== dependencies: - chalk "^5.2.0" + chalk "^5.3.0" cli-table3 "^0.6.3" - commander "^10.0.0" + commander "^10.0.1" fast-memoize "^2.5.2" find-up "5.0.0" - fp-and-or "^0.1.3" + fp-and-or "^0.1.4" get-stdin "^8.0.0" globby "^11.0.4" hosted-git-info "^5.1.0" - ini "^4.0.0" + ini "^4.1.1" js-yaml "^4.1.0" json-parse-helpfulerror "^1.0.3" jsonlines "^0.1.1" lodash "^4.17.21" - minimatch "^9.0.0" + make-fetch-happen "^11.1.1" + minimatch "^9.0.3" p-map "^4.0.0" - pacote "15.1.1" + pacote "15.2.0" parse-github-url "^1.0.2" progress "^2.0.3" prompts-ncu "^3.0.0" - rc-config-loader "^4.1.2" + rc-config-loader "^4.1.3" remote-git-tags "^3.0.0" - rimraf "^5.0.0" - semver "^7.4.0" + rimraf "^5.0.5" + semver "^7.5.4" semver-utils "^1.1.4" source-map-support "^0.5.21" - spawn-please "^2.0.1" - strip-json-comments "^5.0.0" + spawn-please "^2.0.2" + strip-ansi "^7.1.0" + strip-json-comments "^5.0.1" untildify "^4.0.0" update-notifier "^6.0.2" npm-install-checks@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.1.1.tgz#b459b621634d06546664207fde16810815808db1" - integrity sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw== + version "6.3.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" + integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== dependencies: semver "^7.1.1" @@ -4815,9 +4917,9 @@ npm-packlist@^7.0.0: ignore-walk "^6.0.0" npm-pick-manifest@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz#c6acd97d1ad4c5dbb80eac7b386b03ffeb289e5f" - integrity sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA== + version "8.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz#2159778d9c7360420c925c1a2287b5a884c713aa" + integrity sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg== dependencies: npm-install-checks "^6.0.0" npm-normalize-package-bin "^3.0.0" @@ -4855,14 +4957,14 @@ npmlog@^6.0.0: set-blocking "^2.0.0" nwsapi@^2.2.0: - version "2.2.5" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.5.tgz#a52744c61b3889dd44b0a158687add39b8d935e2" - integrity sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ== + version "2.2.7" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" + integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" @@ -4879,14 +4981,33 @@ object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.values@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== +object.fromentries@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +object.groupby@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + +object.values@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" once@^1.3.0: version "1.4.0" @@ -4902,34 +5023,22 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -oo-ascii-tree@^1.82.0: - version "1.82.0" - resolved "https://registry.yarnpkg.com/oo-ascii-tree/-/oo-ascii-tree-1.82.0.tgz#41fb043975b1b3250932b70608d9e31ab81e4eca" - integrity sha512-I9tWDtyeOMkQ6L6+RFwscmxUNAbBxhTsdHZk7NnjZZszKvFvWGN/XpPyCU/sY0u5zsAsi4AJYPMy4ZZkx7+iNA== +oo-ascii-tree@^1.91.0: + version "1.91.0" + resolved "https://registry.yarnpkg.com/oo-ascii-tree/-/oo-ascii-tree-1.91.0.tgz#3add7a82988966b04ac522c74ad7dccbb15bc5cf" + integrity sha512-pH4FFNLTO8VG+vNUm4AHmhLNjoSfQlO1UKIrzBGdeScppY785D93GVMH1XkCwbuO7pd9rrh6El5WF3a5QNvaww== -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" p-cancelable@^3.0.0: version "3.0.0" @@ -5012,10 +5121,10 @@ package-json@^8.1.0: registry-url "^6.0.0" semver "^7.3.7" -pacote@15.1.1: - version "15.1.1" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.1.1.tgz#94d8c6e0605e04d427610b3aacb0357073978348" - integrity sha512-eeqEe77QrA6auZxNHIp+1TzHQ0HBKf5V6c8zcaYZ134EJe1lCi+fjXATkNiEEfbG+e50nu02GLvUtmZcGOYabQ== +pacote@15.2.0: + version "15.2.0" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.2.0.tgz#0f0dfcc3e60c7b39121b2ac612bf8596e95344d3" + integrity sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA== dependencies: "@npmcli/git" "^4.0.0" "@npmcli/installed-package-contents" "^2.0.1" @@ -5023,7 +5132,7 @@ pacote@15.1.1: "@npmcli/run-script" "^6.0.0" cacache "^17.0.0" fs-minipass "^3.0.0" - minipass "^4.0.0" + minipass "^5.0.0" npm-package-arg "^10.0.0" npm-packlist "^7.0.0" npm-pick-manifest "^8.0.0" @@ -5032,7 +5141,7 @@ pacote@15.1.1: promise-retry "^2.0.1" read-package-json "^6.0.0" read-package-json-fast "^3.0.0" - sigstore "^1.0.0" + sigstore "^1.3.0" ssri "^10.0.0" tar "^6.1.11" @@ -5096,13 +5205,13 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.0.tgz#0ffbd4c1f7de9600f98a1405507d9f9acb438ab3" - integrity sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g== +path-scurry@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== dependencies: lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-type@^3.0.0: version "3.0.0" @@ -5137,9 +5246,9 @@ pify@^3.0.0: integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== pirates@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== pkg-dir@^4.2.0: version "4.2.0" @@ -5153,11 +5262,6 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== - pretty-format@^27.0.0, pretty-format@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" @@ -5182,20 +5286,21 @@ progress@^2.0.3: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -projen@^0.71.120: - version "0.71.120" - resolved "https://registry.yarnpkg.com/projen/-/projen-0.71.120.tgz#4976c110e1cd1e39491f673192800e5f8399302e" - integrity sha512-UPFBv17ohlMvK5cW7sSy/q+j0QwTuoHzZzvTxqbbWhSD67eFPUZQC61W7NubtuLgpCgIdJB9QXD6dt72a8iImg== +projen@^0.76.27: + version "0.76.27" + resolved "https://registry.yarnpkg.com/projen/-/projen-0.76.27.tgz#b3b4dace99ef22170b1f2e8a15a9b8a2e655a0e2" + integrity sha512-f/9MibFkrEk1KYIXcvYI9gWQgb0MU6Vhk/vB3L4CxUla8N5BvfihgWHRAlwTTRBiuwOE1/nQ7u/bskurugxCTw== dependencies: "@iarna/toml" "^2.2.5" case "^1.6.3" chalk "^4.1.2" comment-json "4.2.2" + constructs "^10.0.0" conventional-changelog-config-spec "^2.1.0" fast-json-patch "^3.1.1" glob "^8" ini "^2.0.0" - semver "^7.5.3" + semver "^7.5.4" shx "^0.3.4" xmlbuilder2 "^3.1.1" yaml "^2.2.2" @@ -5240,10 +5345,10 @@ psl@^1.1.33: resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== -punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== pupa@^3.1.0: version "3.1.0" @@ -5277,7 +5382,7 @@ quick-lru@^5.1.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== -rc-config-loader@^4.1.2: +rc-config-loader@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/rc-config-loader/-/rc-config-loader-4.1.3.tgz#1352986b8a2d8d96d6fd054a5bb19a60c576876a" integrity sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w== @@ -5393,14 +5498,14 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -regexp.prototype.flags@^1.4.3: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== +regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" - functions-have-names "^1.2.3" + set-function-name "^2.0.0" registry-auth-token@^5.0.1: version "5.0.2" @@ -5468,12 +5573,12 @@ resolve.exports@^1.1.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: - is-core-module "^2.11.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -5506,12 +5611,12 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" -rimraf@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.1.tgz#0881323ab94ad45fec7c0221f27ea1a142f3f0d0" - integrity sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg== +rimraf@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf" + integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A== dependencies: - glob "^10.2.5" + glob "^10.3.7" run-parallel@^1.1.9: version "1.2.0" @@ -5520,6 +5625,16 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -5571,34 +5686,46 @@ semver-utils@^1.1.4: integrity sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA== "semver@2 || 3 || 4 || 5", semver@^5.0.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@7.x, semver@^7.3.2, semver@^7.3.4, semver@^7.5.1: - version "7.5.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" - integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== +semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.0.0, semver@^7.1.1, semver@^7.3.5, semver@^7.3.7, semver@^7.4.0, semver@^7.5.3: - version "7.5.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" - integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== - dependencies: - lru-cache "^6.0.0" +semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -5643,17 +5770,19 @@ signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== signal-exit@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" - integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -sigstore@^1.0.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.7.0.tgz#9186e6c8ce1ab0cba5d97b414212d40f0a01564e" - integrity sha512-KP7QULhWdlu3hlp+jw2EvgWKlOGOY9McLj/jrchLjHNlNPK0KWIwF919cbmOp6QiKXLmPijR2qH/5KYWlbtG9Q== +sigstore@^1.3.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.9.0.tgz#1e7ad8933aa99b75c6898ddd0eeebc3eb0d59875" + integrity sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A== dependencies: - "@sigstore/protobuf-specs" "^0.1.0" - "@sigstore/tuf" "^1.0.1" + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + "@sigstore/sign" "^1.0.0" + "@sigstore/tuf" "^1.0.3" make-fetch-happen "^11.0.1" sisteransi@^1.0.5: @@ -5724,10 +5853,10 @@ source-map@^0.7.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== -spawn-please@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/spawn-please/-/spawn-please-2.0.1.tgz#13d76566ca5e9ac0537a90853ca4f53f27489ae0" - integrity sha512-W+cFbZR2q2mMTfjz5ZGvhBAiX+e/zczFCNlbS9mxiSdYswBXwUuBUT+a0urH+xZZa8f/bs0mXHyZsZHR9hKogA== +spawn-please@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/spawn-please/-/spawn-please-2.0.2.tgz#41912d82fe9504dd5a5424d2b4834e9a6cea56e0" + integrity sha512-KM8coezO6ISQ89c1BzyWNtcn2V2kAVtwIXd3cN/V5a0xPYc1F/vydrRc01wsKFEQ/p+V1a4sw4z2yMITIXrgGw== dependencies: cross-spawn "^7.0.3" @@ -5753,14 +5882,14 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.13" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" - integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== + version "3.0.16" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" + integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== -spdx-license-list@^6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/spdx-license-list/-/spdx-license-list-6.6.0.tgz#403e1807fd87ef2b4781677bc91896d23eaed4ea" - integrity sha512-vLwdf9AWgdJQmG8cai2HKfkInFsliKaCCOwXmdVonClIhdURTX61KdDOoXC1qcQ7gDaZj+CUTcrMJeAdnCtrKA== +spdx-license-list@^6.7.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/spdx-license-list/-/spdx-license-list-6.8.0.tgz#92a99cd6c8b97fe98ae83c54deaffd4d9d503f74" + integrity sha512-5UdM7r9yJ1EvsPQZWfa41AZjLQngl9iMMysm9XBW7Lqhq7aF8cllfqjS+rFCHB8FFMGSM0yFWue2LUV9mR0QzQ== split2@^3.0.0: version "3.2.2" @@ -5782,11 +5911,18 @@ sprintf-js@~1.0.2: integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== ssri@^10.0.0: - version "10.0.4" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.4.tgz#5a20af378be586df139ddb2dfb3bf992cf0daba6" - integrity sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ== + version "10.0.5" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" + integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== dependencies: - minipass "^5.0.0" + minipass "^7.0.3" + +ssri@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" stack-utils@^2.0.3: version "2.0.6" @@ -5820,7 +5956,7 @@ stream-chain@^2.2.5: resolved "https://registry.yarnpkg.com/stream-chain/-/stream-chain-2.2.5.tgz#b30967e8f14ee033c5b9a19bbe8a2cba90ba0d09" integrity sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA== -stream-json@^1.7.5: +stream-json@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/stream-json/-/stream-json-1.8.0.tgz#53f486b2e3b4496c506131f8d7260ba42def151c" integrity sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw== @@ -5867,32 +6003,32 @@ string.prototype.repeat@^0.2.0: resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz#aba36de08dcee6a5a337d49b2ea1da1b28fc0ecf" integrity sha512-1BH+X+1hSthZFW+X+JaUkjkkUPwIlLEMJBLANN3hOob3RhEk5snLWNECDnYbgn/m5c5JV7Ersu1Yubaf+05cIA== -string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" string_decoder@^1.1.1: version "1.3.0" @@ -5920,7 +6056,7 @@ stringify-package@^1.0.1: dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1: +strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== @@ -5949,15 +6085,15 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-json-comments@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-5.0.0.tgz#ec101b766476a703031bc607e3c712569de2aa06" - integrity sha512-V1LGY4UUo0jgwC+ELQ2BNWfPa17TIuwBLg+j1AA/9RPzKINl1lhxVEu2r+ZTTO8aetIsUzE5Qj6LMSBkoGYKKw== +strip-json-comments@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-5.0.1.tgz#0d8b7d01b23848ed7dbdf4baaaa31a8250d8cfa0" + integrity sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw== strip-json-comments@~2.0.1: version "2.0.1" @@ -6015,9 +6151,9 @@ table@^6.8.1: strip-ansi "^6.0.1" tar@^6.1.11, tar@^6.1.2: - version "6.1.15" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" - integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== + version "6.2.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -6096,9 +6232,9 @@ to-regex-range@^5.0.1: is-number "^7.0.0" tough-cookie@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" - integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== dependencies: psl "^1.1.33" punycode "^2.1.1" @@ -6117,6 +6253,11 @@ trim-newlines@^3.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== +ts-api-utils@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" + integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== + ts-jest@^27: version "27.1.5" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.5.tgz#0ddf1b163fbaae3d5b7504a1e65c914a95cff297" @@ -6150,7 +6291,7 @@ ts-node@^10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tsconfig-paths@^3.14.1: +tsconfig-paths@^3.14.1, tsconfig-paths@^3.14.2: version "3.14.2" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== @@ -6160,18 +6301,6 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - tuf-js@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43" @@ -6188,13 +6317,6 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== - dependencies: - prelude-ls "~1.1.2" - type-detect@4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" @@ -6235,6 +6357,36 @@ type-fest@^2.13.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + typed-array-length@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" @@ -6281,6 +6433,18 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +unique-filename@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== + dependencies: + unique-slug "^3.0.0" + unique-filename@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" @@ -6288,6 +6452,13 @@ unique-filename@^3.0.0: dependencies: unique-slug "^4.0.0" +unique-slug@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== + dependencies: + imurmurhash "^0.1.4" + unique-slug@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" @@ -6313,19 +6484,19 @@ universalify@^0.2.0: integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== untildify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -6467,17 +6638,16 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" which@^2.0.1, which@^2.0.2: version "2.0.2" @@ -6507,20 +6677,15 @@ widest-line@^4.0.1: dependencies: string-width "^5.0.1" -word-wrap@^1.2.3, word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -workerpool@^6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.4.0.tgz#f8d5cfb45fde32fa3b7af72ad617c3369567a462" - integrity sha512-i3KR1mQMNwY2wx20ozq2EjISGtQWDIfV56We+yGJ5yDs8jTwQiLLaqHlkBHITlCuJnYlVRmXegxFxZg7gqI++A== +workerpool@^6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" + integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" @@ -6621,9 +6786,9 @@ yaml@1.10.2: integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.2.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" - integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== + version "2.3.4" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" + integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: version "20.2.9"