diff --git a/.github/workflows/gh-release.yaml b/.github/workflows/gh-release.yaml index 9376a0aa..a1fef6f9 100644 --- a/.github/workflows/gh-release.yaml +++ b/.github/workflows/gh-release.yaml @@ -9,70 +9,99 @@ on: jobs: build-binaries: - runs-on: macos-latest + runs-on: ubuntu-latest permissions: - contents: read + contents: write id-token: write - strategy: - matrix: - arch: [x64,arm64] - platform: [linux,macos,win] - exclude: - - platform: win - arch: arm64 + env: + TARBALL_TARGETS: linux-x64,linux-arm64,darwin-x64,darwin-arm64,win32-x64 steps: - name: Checkout uses: actions/checkout@v4 - - uses: depot/setup-action@v1 - with: - oidc: true - - name: Build using Docker (with depot) - run: mkdir preevy-bin && depot build --project ${{ vars.DEPOT_PROJECT_ID }} --build-arg CLI_TARGET=${{ matrix.platform }}-${{ matrix.arch }} -f Dockerfile.cli --target=cli --output=type=tar,dest=./preevy-bin/preevy-${{ matrix.platform }}-${{ matrix.arch }}.tar --progress=plain --platform=linux/${{ matrix.arch == 'x64' && 'amd64' || matrix.arch }} . + - uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.AWS_ROLE }} + aws-region: us-west-2 - - uses: apple-actions/import-codesign-certs@v2 - if: ${{ matrix.platform == 'macos' }} + - uses: actions/setup-node@v4 with: - p12-file-base64: ${{ secrets.APPLE_CERT_DATA }} - p12-password: ${{ secrets.APPLE_CERT_PASS }} + node-version: '18.x' + cache: yarn + + - run: yarn + + - run: yarn build - - name: Sign mac binaries - if: ${{ matrix.platform == 'macos' }} - env: - CERT_CN: ${{ vars.APPLE_CERT_CN }} + - name: Find packaged node version + id: find_packaged_node_version + working-directory: packages/cli run: | - tar -xf ./preevy-bin/preevy-${{ matrix.platform }}-${{ matrix.arch }}.tar - codesign --remove-signature ./preevy - security find-identity -v - codesign --verbose=4 --sign "$CERT_CN" ./preevy - tar -cf ./preevy-bin/preevy-${{ matrix.platform }}-${{ matrix.arch }}.tar ./preevy - - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: preevy-bin-${{ matrix.platform }}-${{ matrix.arch }} - path: ./preevy-bin/** + echo "NODE_VERSION=$(jq -r .oclif.update.node.version package.json)" >> "${GITHUB_OUTPUT}" - release: - runs-on: ubuntu-latest - needs: build-binaries - steps: - - name: Checkout - uses: actions/checkout@v4 - - uses: depot/setup-action@v1 - - name: Download artifacts - uses: actions/download-artifact@v4 + - uses: actions/cache@v3 + id: cache-oclif-pack + name: Setup cache for oclif pack with: - pattern: preevy-bin-* - path: ./preevy-bin - merge-multiple: true + path: packages/cli/tmp/cache + key: preevy-oclif-pack-node-v${{ steps.find_packaged_node_version.outputs.NODE_VERSION }} + + - name: Pack tarballs + working-directory: packages/cli + run: yarn oclif pack tarballs --parallel --no-xz --targets $TARBALL_TARGETS + + - name: Upload tarballs + working-directory: packages/cli + run: yarn oclif upload tarballs --no-xz --targets $TARBALL_TARGETS + + - name: Rename tarballs to remove git sha + if: startsWith(github.ref, 'refs/tags/') + working-directory: packages/cli/dist + run: | + git_sha="$(git rev-parse --short HEAD)" + for f in $(find . -maxdepth 1 -type f -name 'preevy-v*'); do + new_name="$(echo ${f} | sed 's/-'"${git_sha}"'//')" + echo "Renaming ${f} to ${new_name}" + mv "${f}" "${new_name}" + done - name: Release + if: startsWith(github.ref, 'refs/tags/') uses: softprops/action-gh-release@v1 with: generate_release_notes: true draft: ${{ !startsWith(github.ref, 'refs/tags/') }} prerelease: ${{ !startsWith(github.ref, 'refs/tags/') }} files: | - ./preevy-bin/** + packages/cli/dist/preevy-v*.tar.gz + + - uses: actions/create-github-app-token@v1 + if: startsWith(github.ref, 'refs/tags/') + id: app-token + with: + app-id: ${{ secrets.PREEVY_AUTOMATION_APP_ID }} + private-key: ${{ secrets.PREEVY_AUTOMATION_PRIVATE_KEY }} + owner: livecycle + repositories: 'preevy,homebrew-preevy' + + - uses: actions/checkout@v4 + name: Checkout homebrew repo + if: startsWith(github.ref, 'refs/tags/') + with: + token: ${{ steps.app-token.outputs.token }} + repository: livecycle/homebrew-preevy + path: homebrew + + - name: Update Homebrew formula + if: startsWith(github.ref, 'refs/tags/') + working-directory: packages/cli + run: | + version="$(jq -r .version package.json)" + node scripts/homebrew.mjs > ../../homebrew/Formula/preevy.rb + cd ../../homebrew + git config user.name "GitHub Actions" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add Formula/preevy.rb + git commit -m "Update Preevy formula for version ${version}" + git push diff --git a/Dockerfile.cli b/Dockerfile.cli deleted file mode 100644 index 693260c4..00000000 --- a/Dockerfile.cli +++ /dev/null @@ -1,31 +0,0 @@ -FROM node:18-bullseye as base -FROM base as deps-files -WORKDIR /app -COPY --link yarn.lock package.json . -COPY --link packages packages -RUN find . -type f -not -iname "yarn.lock" -not -iname "package.json" -delete && find . -type l -delete && find . -type d -empty -delete -COPY --link patches patches - -FROM base as builder -WORKDIR /app -COPY --link --from=deps-files /app /app -RUN --mount=type=cache,id=livecycle/preevy-cli/yarn-cache,target=/yarn/cache \ - yarn --cache-folder=/yarn/cache -COPY --link . . -RUN yarn build - -FROM builder as pkg -ARG CLI_TARGET=macos-arm64 -WORKDIR /app/packages/cli -ENV PKG_CACHE_PATH=/pkg/cache -RUN --mount=type=cache,id=livecycle/preevy-cli/pkg-cache,target=/pkg/cache \ - yarn pkg --compress GZip --no-dict --public --public-packages tslib --options max_old_space_size=4096 -t node18-${CLI_TARGET} . --out-path /preevy/bin - -FROM scratch as cli -ARG CLI_TARGET=macos-arm64 -COPY --link --from=pkg /preevy/bin/* / -# use docker buildx build -f Dockerfile.cli --target=cli . --output=type=local,dest=./dist - -FROM docker:24-cli as release -COPY --from=pkg /preevy/bin/* /usr/bin/ -CMD [ "preevy" ] diff --git a/lerna.json b/lerna.json index 18885081..77254819 100644 --- a/lerna.json +++ b/lerna.json @@ -1,4 +1,4 @@ { "$schema": "node_modules/lerna/schemas/lerna-schema.json", - "version": "0.0.59" + "version": "0.0.60" } diff --git a/packages/cli-common/package.json b/packages/cli-common/package.json index 69db6e95..741bdbce 100644 --- a/packages/cli-common/package.json +++ b/packages/cli-common/package.json @@ -1,6 +1,6 @@ { "name": "@preevy/cli-common", - "version": "0.0.59", + "version": "0.0.60", "description": "Common library for the Preevy CLI and plugins", "type": "module", "main": "dist/index.js", @@ -13,7 +13,7 @@ "license": "Apache-2.0", "dependencies": { "@oclif/core": "^3.15.1", - "@preevy/core": "0.0.59", + "@preevy/core": "0.0.60", "chalk": "^4.1.2", "iter-tools-es": "^7.5.3", "lodash-es": "^4.17.21" diff --git a/packages/cli-common/src/commands/base-command.ts b/packages/cli-common/src/commands/base-command.ts index 29e05f0d..453c8c1a 100644 --- a/packages/cli-common/src/commands/base-command.ts +++ b/packages/cli-common/src/commands/base-command.ts @@ -3,7 +3,8 @@ import { LogLevel, Logger, logLevels, ComposeModel, ProcessError, telemetryEmitter, } from '@preevy/core' import { asyncReduce } from 'iter-tools-es' -import { ParsingToken } from '@oclif/core/lib/interfaces/parser.js' +import { ArgOutput, FlagOutput, Input, ParserOutput, ParsingToken } from '@oclif/core/lib/interfaces/parser.js' +import { mergeWith } from 'lodash-es' import { commandLogger } from '../lib/log.js' import { composeFlags, pluginFlags } from '../lib/common-flags/index.js' import { PreevyConfig } from '../../../core/src/config.js' @@ -90,9 +91,14 @@ abstract class BaseCommand extends Comm return result } - public async init(): Promise { - await super.init() - const { args, flags, raw } = await this.parse({ + protected async reparse< + F extends FlagOutput, + B extends FlagOutput, + A extends ArgOutput>( + options?: Input, + argv?: string[], + ): Promise> { + return await this.parse(mergeWith({ flags: this.ctor.flags, baseFlags: { ...this.ctor.baseFlags, @@ -100,7 +106,12 @@ abstract class BaseCommand extends Comm }, args: this.ctor.args, strict: false, - }) + }, options, argv)) + } + + public async init(): Promise { + await super.init() + const { args, flags, raw } = await this.reparse() this.args = args as Args this.flags = flags as Flags if (this.flags.debug) { diff --git a/packages/cli/.eslintignore b/packages/cli/.eslintignore index 0a95885c..1857e62b 100644 --- a/packages/cli/.eslintignore +++ b/packages/cli/.eslintignore @@ -1,2 +1,4 @@ /dist -node_modules \ No newline at end of file +node_modules +/scripts +/tmp \ No newline at end of file diff --git a/packages/cli/.github/dependabot.yml b/packages/cli/.github/dependabot.yml deleted file mode 100644 index 0ef035df..00000000 --- a/packages/cli/.github/dependabot.yml +++ /dev/null @@ -1,22 +0,0 @@ -version: 2 -updates: - - package-ecosystem: 'npm' - directory: '/' - schedule: - interval: 'weekly' - day: 'saturday' - versioning-strategy: 'increase' - labels: - - 'dependencies' - open-pull-requests-limit: 5 - pull-request-branch-name: - separator: '-' - commit-message: - # cause a release for non-dev-deps - prefix: fix(deps) - # no release for dev-deps - prefix-development: chore(dev-deps) - ignore: - - dependency-name: '@salesforce/dev-scripts' - - dependency-name: '*' - update-types: ['version-update:semver-major'] diff --git a/packages/cli/.github/workflows/automerge.yml b/packages/cli/.github/workflows/automerge.yml deleted file mode 100644 index 796eafae..00000000 --- a/packages/cli/.github/workflows/automerge.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: automerge -on: - workflow_dispatch: - schedule: - - cron: '17 2,5,8,11 * * *' - -jobs: - automerge: - uses: oclif/github-workflows/.github/workflows/automerge.yml@main - secrets: inherit diff --git a/packages/cli/.github/workflows/failureNotifications.yml b/packages/cli/.github/workflows/failureNotifications.yml deleted file mode 100644 index 6b4118fc..00000000 --- a/packages/cli/.github/workflows/failureNotifications.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: failureNotifications - -on: - workflow_run: - workflows: - - version, tag and github release - - publish - types: - - completed - -jobs: - failure-notify: - runs-on: ubuntu-latest - if: ${{ github.event.workflow_run.conclusion == 'failure' }} - steps: - - name: Announce Failure - id: slack - uses: slackapi/slack-github-action@v1.21.0 - env: - # for non-CLI-team-owned plugins, you can send this anywhere you like - SLACK_WEBHOOK_URL: ${{ secrets.CLI_ALERTS_SLACK_WEBHOOK }} - SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK - with: - payload: | - { - "text": "${{ github.event.workflow_run.name }} failed: ${{ github.event.workflow_run.repository.name }}", - "blocks": [ - { - "type": "header", - "text": { - "type": "plain_text", - "text": ":bh-alert: ${{ github.event.workflow_run.name }} failed: ${{ github.event.workflow_run.repository.name }} :bh-alert:" - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Repo: ${{ github.event.workflow_run.repository.html_url }}\nWorkflow name: `${{ github.event.workflow_run.name }}`\nJob url: ${{ github.event.workflow_run.html_url }}" - } - } - ] - } diff --git a/packages/cli/.github/workflows/manualRelease.yml b/packages/cli/.github/workflows/manualRelease.yml deleted file mode 100644 index 8ceb52c3..00000000 --- a/packages/cli/.github/workflows/manualRelease.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: manual release - -on: - workflow_dispatch: - -jobs: - release: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - token: ${{ secrets.SVC_CLI_BOT_GITHUB_TOKEN }} - - name: Conventional Changelog Action - id: changelog - uses: TriPSs/conventional-changelog-action@d360fad3a42feca6462f72c97c165d60a02d4bf2 - # overriding some of the basic behaviors to just get the changelog - with: - git-user-name: svc-cli-bot - git-user-email: svc_cli_bot@salesforce.com - github-token: ${{ secrets.SVC_CLI_BOT_GITHUB_TOKEN }} - output-file: false - # always do the release, even if there are no semantic commits - skip-on-empty: false - tag-prefix: '' - - uses: notiz-dev/github-action-json-property@2192e246737701f108a4571462b76c75e7376216 - id: packageVersion - with: - path: 'package.json' - prop_path: 'version' - - name: Create Github Release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.SVC_CLI_BOT_GITHUB_TOKEN }} - with: - tag_name: ${{ steps.packageVersion.outputs.prop }} - release_name: ${{ steps.packageVersion.outputs.prop }} diff --git a/packages/cli/.github/workflows/notify-slack-on-pr-open.yml b/packages/cli/.github/workflows/notify-slack-on-pr-open.yml deleted file mode 100644 index 13b5c9e5..00000000 --- a/packages/cli/.github/workflows/notify-slack-on-pr-open.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Pull Request Slack Notification - -on: - pull_request: - types: [opened, reopened] - -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Notify Slack on PR open - env: - WEBHOOK_URL : ${{ secrets.CLI_TEAM_SLACK_WEBHOOK_URL }} - PULL_REQUEST_AUTHOR_ICON_URL : ${{ github.event.pull_request.user.avatar_url }} - PULL_REQUEST_AUTHOR_NAME : ${{ github.event.pull_request.user.login }} - PULL_REQUEST_AUTHOR_PROFILE_URL: ${{ github.event.pull_request.user.html_url }} - PULL_REQUEST_BASE_BRANCH_NAME : ${{ github.event.pull_request.base.ref }} - PULL_REQUEST_COMPARE_BRANCH_NAME : ${{ github.event.pull_request.head.ref }} - PULL_REQUEST_NUMBER : ${{ github.event.pull_request.number }} - PULL_REQUEST_REPO: ${{ github.event.pull_request.head.repo.name }} - PULL_REQUEST_TITLE : ${{ github.event.pull_request.title }} - PULL_REQUEST_URL : ${{ github.event.pull_request.html_url }} - uses: salesforcecli/github-workflows/.github/actions/prNotification@main diff --git a/packages/cli/.github/workflows/onPushToMain.yml b/packages/cli/.github/workflows/onPushToMain.yml deleted file mode 100644 index 61eda8ad..00000000 --- a/packages/cli/.github/workflows/onPushToMain.yml +++ /dev/null @@ -1,18 +0,0 @@ -# test -name: version, tag and github release - -on: - push: - branches: [main] - -jobs: - release: - uses: oclif/github-workflows/.github/workflows/githubRelease.yml@main - secrets: inherit - - # most repos won't use this - # depends on previous job to avoid git collisions, not for any functionality reason - # docs: - # uses: salesforcecli/github-workflows/.github/workflows/publishTypedoc.yml@main - # secrets: inherit - # needs: release diff --git a/packages/cli/.github/workflows/onRelease.yml b/packages/cli/.github/workflows/onRelease.yml deleted file mode 100644 index 8876db48..00000000 --- a/packages/cli/.github/workflows/onRelease.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: publish - -on: - release: - types: [released] - # support manual release in case something goes wrong and needs to be repeated or tested - workflow_dispatch: - inputs: - tag: - description: tag that needs to publish - type: string - required: true -jobs: - npm: - uses: oclif/github-workflows/.github/workflows/npmPublish.yml@main - with: - tag: latest - githubTag: ${{ github.event.release.tag_name || inputs.tag }} - secrets: inherit diff --git a/packages/cli/.github/workflows/test.yml b/packages/cli/.github/workflows/test.yml deleted file mode 100644 index 4286a556..00000000 --- a/packages/cli/.github/workflows/test.yml +++ /dev/null @@ -1,9 +0,0 @@ -name: tests -on: - push: - branches-ignore: [main] - workflow_dispatch: - -jobs: - unit-tests: - uses: oclif/github-workflows/.github/workflows/unitTest.yml@main diff --git a/packages/cli/.gitignore b/packages/cli/.gitignore index 0e2ac517..9dc5c738 100644 --- a/packages/cli/.gitignore +++ b/packages/cli/.gitignore @@ -28,3 +28,4 @@ oclif.manifest.json *-debug.log *-error.log /.nyc_output +/tmp diff --git a/packages/cli/.nvmrc b/packages/cli/.nvmrc index e44a38e0..eb800ed4 100644 --- a/packages/cli/.nvmrc +++ b/packages/cli/.nvmrc @@ -1 +1 @@ -v18.12.1 +v18.19.0 diff --git a/packages/cli/README.md b/packages/cli/README.md index ca1f76b2..cc49641f 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -19,7 +19,7 @@ $ npm install -g preevy $ preevy COMMAND running command... $ preevy (--version) -preevy/0.0.59 darwin-arm64 node-v18.12.1 +preevy/0.0.60 darwin-arm64 node-v18.19.0 $ preevy --help [COMMAND] USAGE $ preevy COMMAND @@ -121,7 +121,7 @@ FLAG DESCRIPTIONS If not specified, will detect from the current Git context ``` -_See code: [src/commands/down.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/down.ts)_ +_See code: [src/commands/down.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/down.ts)_ ## `preevy help [COMMANDS]` @@ -141,7 +141,7 @@ DESCRIPTION Display help for preevy. ``` -_See code: [src/commands/help.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/help.ts)_ +_See code: [src/commands/help.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/help.ts)_ ## `preevy init [PROFILE-ALIAS]` @@ -170,7 +170,7 @@ DESCRIPTION Initialize or import a new profile ``` -_See code: [src/commands/init.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/init.ts)_ +_See code: [src/commands/init.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/init.ts)_ ## `preevy login` @@ -198,7 +198,7 @@ DESCRIPTION Login to the Livecycle SaaS ``` -_See code: [src/commands/login.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/login.ts)_ +_See code: [src/commands/login.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/login.ts)_ ## `preevy logs [SERVICES]` @@ -264,7 +264,7 @@ FLAG DESCRIPTIONS If not specified, will detect from the current Git context ``` -_See code: [src/commands/logs.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/logs.ts)_ +_See code: [src/commands/logs.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/logs.ts)_ ## `preevy ls` @@ -326,7 +326,7 @@ DESCRIPTION List preview environments ``` -_See code: [src/commands/ls.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/ls.ts)_ +_See code: [src/commands/ls.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/ls.ts)_ ## `preevy profile config update` @@ -391,7 +391,7 @@ DESCRIPTION View and update profile configuration ``` -_See code: [src/commands/profile/config/update.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/profile/config/update.ts)_ +_See code: [src/commands/profile/config/update.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/profile/config/update.ts)_ ## `preevy profile config view` @@ -418,7 +418,7 @@ DESCRIPTION View profile configuration ``` -_See code: [src/commands/profile/config/view.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/profile/config/view.ts)_ +_See code: [src/commands/profile/config/view.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/profile/config/view.ts)_ ## `preevy profile cp` @@ -451,7 +451,7 @@ DESCRIPTION Copy a profile ``` -_See code: [src/commands/profile/cp.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/profile/cp.ts)_ +_See code: [src/commands/profile/cp.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/profile/cp.ts)_ ## `preevy profile create NAME URL` @@ -515,7 +515,7 @@ DESCRIPTION Create a new profile ``` -_See code: [src/commands/profile/create.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/profile/create.ts)_ +_See code: [src/commands/profile/create.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/profile/create.ts)_ ## `preevy profile current` @@ -542,7 +542,7 @@ DESCRIPTION Display current profile in use ``` -_See code: [src/commands/profile/current.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/profile/current.ts)_ +_See code: [src/commands/profile/current.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/profile/current.ts)_ ## `preevy profile import LOCATION` @@ -572,7 +572,7 @@ DESCRIPTION Import an existing profile ``` -_See code: [src/commands/profile/import.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/profile/import.ts)_ +_See code: [src/commands/profile/import.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/profile/import.ts)_ ## `preevy profile key [TYPE]` @@ -602,7 +602,7 @@ DESCRIPTION Show profile key ``` -_See code: [src/commands/profile/key.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/profile/key.ts)_ +_See code: [src/commands/profile/key.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/profile/key.ts)_ ## `preevy profile link` @@ -631,7 +631,7 @@ DESCRIPTION Link the profile to the logged in user's organization ``` -_See code: [src/commands/profile/link.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/profile/link.ts)_ +_See code: [src/commands/profile/link.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/profile/link.ts)_ ## `preevy profile ls` @@ -670,7 +670,7 @@ DESCRIPTION Lists profiles ``` -_See code: [src/commands/profile/ls.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/profile/ls.ts)_ +_See code: [src/commands/profile/ls.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/profile/ls.ts)_ ## `preevy profile rm NAME` @@ -701,7 +701,7 @@ DESCRIPTION Remove a profile ``` -_See code: [src/commands/profile/rm.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/profile/rm.ts)_ +_See code: [src/commands/profile/rm.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/profile/rm.ts)_ ## `preevy profile use NAME` @@ -727,7 +727,7 @@ DESCRIPTION Set current profile ``` -_See code: [src/commands/profile/use.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/profile/use.ts)_ +_See code: [src/commands/profile/use.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/profile/use.ts)_ ## `preevy purge` @@ -782,7 +782,7 @@ DESCRIPTION Delete all cloud provider machines and potentially other resources ``` -_See code: [src/commands/purge.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/purge.ts)_ +_See code: [src/commands/purge.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/purge.ts)_ ## `preevy ssh ENVID` @@ -953,7 +953,7 @@ FLAG DESCRIPTIONS If not specified, will detect from the current Git context ``` -_See code: [src/commands/up.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/up.ts)_ +_See code: [src/commands/up.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/up.ts)_ ## `preevy urls [SERVICE] [PORT]` @@ -1014,7 +1014,7 @@ FLAG DESCRIPTIONS If not specified, will detect from the current Git context ``` -_See code: [src/commands/urls.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/urls.ts)_ +_See code: [src/commands/urls.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/urls.ts)_ ## `preevy version` @@ -1038,5 +1038,5 @@ DESCRIPTION Show Preevy version ``` -_See code: [src/commands/version.ts](https://github.com/livecycle/preevy/blob/v0.0.59/src/commands/version.ts)_ +_See code: [src/commands/version.ts](https://github.com/livecycle/preevy/blob/v0.0.60/src/commands/version.ts)_ diff --git a/packages/cli/bin/dev.cmd b/packages/cli/bin/dev.cmd index 8d003826..8fb50945 100644 --- a/packages/cli/bin/dev.cmd +++ b/packages/cli/bin/dev.cmd @@ -1,3 +1,3 @@ @echo off -node "%~dp0\dev.js" %* \ No newline at end of file +node --enable-source-maps --no-warnings=ExperimentalWarning "%~dp0\dev.js" %* \ No newline at end of file diff --git a/packages/cli/bin/dev.js b/packages/cli/bin/dev.js index 5d7d9285..56417ec0 100755 --- a/packages/cli/bin/dev.js +++ b/packages/cli/bin/dev.js @@ -1,4 +1,4 @@ -#!/usr/bin/env -S NODE_OPTIONS=--no-warnings=ExperimentalWarning\_--experimental-specifier-resolution=node ts-node --esm --swc +#!/usr/bin/env -S NODE_OPTIONS=--no-warnings=ExperimentalWarning\_--enable-source-maps=\_--experimental-specifier-resolution=node ts-node --esm --swc // eslint-disable-next-line node/shebang async function main() { await import('disposablestack/auto') diff --git a/packages/cli/bin/run.cmd b/packages/cli/bin/run.cmd index fdc38821..4e2b722f 100644 --- a/packages/cli/bin/run.cmd +++ b/packages/cli/bin/run.cmd @@ -1,3 +1,3 @@ @echo off -node "%~dp0\run.js" %* +node --enable-source-maps --no-warnings=ExperimentalWarning "%~dp0\run.js" %* diff --git a/packages/cli/bin/run.js b/packages/cli/bin/run.js index 9865c157..b700c37d 100755 --- a/packages/cli/bin/run.js +++ b/packages/cli/bin/run.js @@ -1,4 +1,4 @@ -#!/usr/bin/env -S node --no-warnings=ExperimentalWarning +#!/usr/bin/env -S node --no-warnings=ExperimentalWarning --enable-source-maps async function main() { await import('disposablestack/auto') const {execute} = await import('@oclif/core') diff --git a/packages/cli/package.json b/packages/cli/package.json index d3100227..1a77012b 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "preevy", - "version": "0.0.59", + "version": "0.0.60", "description": "Quickly deploy preview environments to the cloud!", "author": "Livecycle", "type": "module", @@ -26,15 +26,15 @@ "@inquirer/prompts": "^3.3.0", "@oclif/core": "^3.15.1", "@oclif/plugin-help": "^5", - "@preevy/cli-common": "0.0.59", - "@preevy/common": "0.0.59", - "@preevy/compose-tunnel-agent": "0.0.59", - "@preevy/core": "0.0.59", - "@preevy/driver-azure": "0.0.59", - "@preevy/driver-gce": "0.0.59", - "@preevy/driver-kube-pod": "0.0.59", - "@preevy/driver-lightsail": "0.0.59", - "@preevy/plugin-github": "0.0.59", + "@preevy/cli-common": "0.0.60", + "@preevy/common": "0.0.60", + "@preevy/compose-tunnel-agent": "0.0.60", + "@preevy/core": "0.0.60", + "@preevy/driver-azure": "0.0.60", + "@preevy/driver-gce": "0.0.60", + "@preevy/driver-kube-pod": "0.0.60", + "@preevy/driver-lightsail": "0.0.60", + "@preevy/plugin-github": "0.0.60", "disposablestack": "^1.1.2", "inquirer-autocomplete-standalone": "^0.8.1", "iter-tools-es": "^7.5.3", @@ -63,8 +63,7 @@ "eslint-plugin-react": "^7.32.2", "jest": "29.7.0", "lint-staged": "^15.2.0", - "oclif": "^4.1.0", - "pkg": "^5.8.1", + "oclif": "^4.2.0", "shx": "^0.3.3", "ts-node": "^10.9.1", "tsconfig-paths": "^4.2.0", @@ -92,20 +91,19 @@ "./dist/hooks/postrun/telemetry.js" ] }, - "topicSeparator": " " - }, - "pkg": { - "assets": [ - "../*/static/**/*", - "../compose-tunnel-agent/out/**/*", - "../compose-tunnel-agent/package.json", - "../compose-tunnel-agent/Dockerfile", - "../compose-tunnel-agent/.dockerignore" - ], - "scripts": [ - "dist/commands/**/*.js", - "dist/hooks/**/*.js" - ] + "topicSeparator": " ", + "update": { + "node": { + "version": "18.19.0", + "options": [ + "--no-warnings=ExperimentalWarning", + "--enable-source-maps" + ] + }, + "s3": { + "bucket": "releases.preevy.dev" + } + } }, "scripts": { "build": "yarn clean && tsc -b", diff --git a/packages/cli/scripts/homebrew.mjs b/packages/cli/scripts/homebrew.mjs new file mode 100644 index 00000000..c9cac88e --- /dev/null +++ b/packages/cli/scripts/homebrew.mjs @@ -0,0 +1,95 @@ +import fs from 'fs' +import path from 'path' +import os from 'os' + +const distDir = 'dist' +const matrix = { + darwin: ['x64', 'arm64'], + linux: ['x64', 'arm64'], +} + +const url = ({ os, arch, version }) => `https://github.com/livecycle/preevy/releases/download/v${version}/preevy-v${version}-${os}-${arch}.tar.gz` + +const template = ctx => `# This file is automatically generated by https://github.com/livecycle/preevy/blob/main/packages/cli/scripts/homebrew.js +# Do not update this file directly; Please update the template instead +class Preevy < Formula + desc "Quickly deploy preview environments to your cloud provider or Kubernetes cluster" + homepage "https://preevy.dev" + url "${ ctx.darwin.x64.url }" + sha256 "${ ctx.darwin.x64.sha }" + license "Apache-2.0" + version "${ ctx.version }" + + on_macos do + on_arm do + url "${ ctx.darwin.arm64.url }" + sha256 "${ ctx.darwin.arm64.sha }" + end + end + + on_linux do + url "${ ctx.linux.x64.url }" + sha256 "${ ctx.linux.x64.sha }" + on_arm do + url "${ ctx.linux.arm64.url }" + sha256 "${ ctx.linux.arm64.sha }" + end + end + + def install + inreplace "bin/preevy", /^CLIENT_HOME=/, "export PREEVY_OCLIF_CLIENT_HOME=#{lib/"client"}\nCLIENT_HOME=" + libexec.install Dir["*"] + bin.install_symlink libexec/"bin/preevy" + end + + test do + system bin/"preevy", "version" + end +end +` + +const manifestFiles = fs.readdirSync(distDir) + .filter(file => file.endsWith('-buildmanifest')) + .map(file => path.join(distDir, file)) + +const manifestFilename = ({ os, arch }) => manifestFiles.find(file => file.includes(`-${os}-${arch}-`)) + +const readManifest = ({ os, arch }) => { + const filename = manifestFilename({ os, arch }) + if (!filename) { + throw new Error(`Missing ${os} ${arch} build manifest`) + } + const manifest = JSON.parse(fs.readFileSync(filename, 'utf8')) + const requiredProp = (prop) => { + if (!manifest[prop]) { + throw new Error(`Missing ${prop} in manifest: ${filename}`) + } + return manifest[prop] + } + return { sha: requiredProp('sha256gz'), version: requiredProp('version') } +} + +const main = async () => { + const context = {} + Object.entries(matrix).forEach(([os, archs]) => { + context[os] = context[os] ?? {} + archs.forEach(arch => { + const { sha, version } = readManifest({ os, arch }) + context.version = version + context[os][arch] = { + sha, + url: url({ os, arch, version }) + } + }) + }) + + process.stdout.write(template(context)) + process.stdout.write(os.EOL) +} + +main().catch(err => { + console.error(err) + process.exit(1) +}) + + diff --git a/packages/cli/src/commands/down.ts b/packages/cli/src/commands/down.ts index 1cc32caa..e8e703b8 100644 --- a/packages/cli/src/commands/down.ts +++ b/packages/cli/src/commands/down.ts @@ -1,10 +1,10 @@ import { Flags } from '@oclif/core' import { findEnvId, machineResourceType, withSpinner } from '@preevy/core' -import DriverCommand from '../driver-command.js' +import MachineCreationDriverCommand from '../machine-creation-driver-command.js' import { envIdFlags } from '../common-flags.js' // eslint-disable-next-line no-use-before-define -export default class Down extends DriverCommand { +export default class Down extends MachineCreationDriverCommand { static description = 'Delete preview environments' static flags = { @@ -28,6 +28,7 @@ export default class Down extends DriverCommand { const log = this.logger const { flags } = this const driver = await this.driver() + const machineCreationDriver = await this.machineCreationDriver() const envId = await findEnvId({ log, @@ -45,7 +46,10 @@ export default class Down extends DriverCommand { } await withSpinner(async () => { - await driver.deleteResources(flags.wait, { type: machineResourceType, providerId: machine.providerId }) + await machineCreationDriver.deleteResources( + flags.wait, + { type: machineResourceType, providerId: machine.providerId }, + ) }, { opPrefix: `Deleting ${driver.friendlyName} machine ${machine.providerId} for environment ${envId}` }) await Promise.all( diff --git a/packages/cli/src/commands/init.ts b/packages/cli/src/commands/init.ts index 934ff50e..f26e581d 100644 --- a/packages/cli/src/commands/init.ts +++ b/packages/cli/src/commands/init.ts @@ -55,7 +55,7 @@ export default class Init extends BaseCommand { const driver = await chooseDriver() const driverStatic = machineDrivers[driver] - const driverFlags = await driverStatic.inquireFlags() + const driverFlags = await driverStatic.inquireFlags({ log: this.logger }) ux.info(text.recommendation('To use Preevy in a CI flow, select a remote storage for your profile.')) const locationType = await chooseFsType(({ driver })) diff --git a/packages/cli/src/commands/purge.ts b/packages/cli/src/commands/purge.ts index e7fad27e..3cfbe119 100644 --- a/packages/cli/src/commands/purge.ts +++ b/packages/cli/src/commands/purge.ts @@ -3,7 +3,7 @@ import { Flags, ux } from '@oclif/core' import { asyncFilter, asyncToArray } from 'iter-tools-es' import { groupBy, partition } from 'lodash-es' import { MachineResource, isPartialMachine, machineResourceType } from '@preevy/core' -import DriverCommand from '../driver-command.js' +import MachineCreationDriverCommand from '../machine-creation-driver-command.js' import { carefulBooleanPrompt } from '../prompt.js' const isMachineResource = (r: { type: string }): r is MachineResource => r.type === machineResourceType @@ -35,7 +35,7 @@ const confirmPurge = async ( } // eslint-disable-next-line no-use-before-define -export default class Purge extends DriverCommand { +export default class Purge extends MachineCreationDriverCommand { static description = 'Delete all cloud provider machines and potentially other resources' static flags = { @@ -68,6 +68,7 @@ export default class Purge extends DriverCommand { const { flags } = this const driver = await this.driver() + const creationDriver = await this.machineCreationDriver() const resourcePlurals: Record = { [machineResourceType]: 'machines', ...driver.resourcePlurals } const driverResourceTypes = new Set(Object.keys(resourcePlurals)) @@ -83,7 +84,7 @@ export default class Purge extends DriverCommand { const allResources = await asyncToArray( asyncFilter( ({ type }) => flags.all || flags.type.includes(type), - driver.listDeletableResources(), + creationDriver.listDeletableResources(), ), ) @@ -106,7 +107,7 @@ export default class Purge extends DriverCommand { return undefined } - await driver.deleteResources(flags.wait, ...allResources) + await creationDriver.deleteResources(flags.wait, ...allResources) if (flags.json) { return allResources diff --git a/packages/cli/src/driver-command.ts b/packages/cli/src/driver-command.ts index 06c6d236..28bedcda 100644 --- a/packages/cli/src/driver-command.ts +++ b/packages/cli/src/driver-command.ts @@ -1,7 +1,8 @@ import { Command, Flags, Interfaces } from '@oclif/core' import { MachineConnection, MachineDriver, isPartialMachine, profileStore } from '@preevy/core' -import { pickBy } from 'lodash-es' -import { DriverFlags, DriverName, FlagType, flagsForAllDrivers, machineDrivers, removeDriverPrefix } from './drivers.js' +import { mapValues, pickBy } from 'lodash-es' +import { Flag } from '@oclif/core/lib/interfaces' +import { DriverFlags, DriverName, FlagType, addDriverPrefix, flagsForAllDrivers, machineDrivers, removeDriverPrefix } from './drivers.js' import ProfileCommand from './profile-command.js' // eslint-disable-next-line no-use-before-define @@ -40,18 +41,25 @@ abstract class DriverCommand extends ProfileCommand driver: Name, type: Type ): Promise> { - const driverFlagNames = Object.keys(machineDrivers[driver][type]) - const flagDefaults = pickBy( - { - ...await profileStore(this.store).ref.defaultDriverFlags(driver), - ...this.preevyConfig?.drivers?.[driver] ?? {}, - }, - (_v, k) => driverFlagNames.includes(k), - ) as DriverFlags - return { - ...flagDefaults, - ...removeDriverPrefix>(driver, this.flags), + const driverFlags = machineDrivers[driver][type] + const flagDefaults = { + ...await profileStore(this.store).ref.defaultDriverFlags(driver), + ...this.preevyConfig?.drivers?.[driver] ?? {}, } + + const flagDefsWithDefaults = addDriverPrefix(driver, mapValues( + driverFlags, + (v: Flag, k) => Object.assign(v, { default: flagDefaults[k] ?? v.default }), + )) as Record> + + const { flags: parsedFlags } = await this.reparse({ flags: flagDefsWithDefaults }) + + const driverFlagNamesWithPrefix = new Set(Object.keys(driverFlags).map(k => `${driver}-${k}`)) + + const parsedDriverFlags = pickBy(parsedFlags, (_v, k) => driverFlagNamesWithPrefix.has(k)) + + const result = removeDriverPrefix(driver, parsedDriverFlags) as DriverFlags + return result } #driver: MachineDriver | undefined diff --git a/packages/cli/src/hooks/init/load-plugins.ts b/packages/cli/src/hooks/init/load-plugins.ts index 3c332ad4..4e12bd96 100644 --- a/packages/cli/src/hooks/init/load-plugins.ts +++ b/packages/cli/src/hooks/init/load-plugins.ts @@ -7,7 +7,7 @@ const wrappedHook: OclifHook<'init'> = async function wrappedHook(...args) { await initHook.call(this, ...args) } catch (e) { // eslint-disable-next-line no-console - console.warn(`warning: failed to init context: ${e}`) + console.warn(`warning: failed to init context: ${(e as Error).stack || e}`) telemetryEmitter().capture('plugin-init-error', { error: e }) await telemetryEmitter().flush() process.exit(1) diff --git a/packages/common/package.json b/packages/common/package.json index 7e469fd6..ff7b3fdd 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@preevy/common", - "version": "0.0.59", + "version": "0.0.60", "description": "", "type": "module", "exports": { diff --git a/packages/compose-tunnel-agent/package.json b/packages/compose-tunnel-agent/package.json index 554d5eaa..3edbc84d 100644 --- a/packages/compose-tunnel-agent/package.json +++ b/packages/compose-tunnel-agent/package.json @@ -1,6 +1,6 @@ { "name": "@preevy/compose-tunnel-agent", - "version": "0.0.59", + "version": "0.0.60", "description": "", "main": "out/index.mjs", "exports": { @@ -19,7 +19,7 @@ "@fastify/cors": "^8.3.0", "@fastify/request-context": "^5.0.0", "@fastify/websocket": "^8.2.0", - "@preevy/common": "0.0.59", + "@preevy/common": "0.0.60", "dockerode": "^3.3.4", "fastify": "^4.22.2", "fastify-type-provider-zod": "^1.1.9", diff --git a/packages/core/package.json b/packages/core/package.json index af795bf0..a20beaac 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@preevy/core", - "version": "0.0.59", + "version": "0.0.60", "description": "Core functionality for Preevy", "type": "module", "exports": { @@ -13,8 +13,8 @@ "license": "Apache-2.0", "dependencies": { "@inquirer/prompts": "^3.3.0", - "@preevy/common": "0.0.59", - "@preevy/compose-tunnel-agent": "0.0.59", + "@preevy/common": "0.0.60", + "@preevy/compose-tunnel-agent": "0.0.60", "chalk": "^4.1.2", "fast-safe-stringify": "^2.1.1", "is-stream": "^2.0.1", diff --git a/packages/core/src/compose-tunnel-agent-client.ts b/packages/core/src/compose-tunnel-agent-client.ts index 4ca62817..a5cf9e86 100644 --- a/packages/core/src/compose-tunnel-agent-client.ts +++ b/packages/core/src/compose-tunnel-agent-client.ts @@ -10,33 +10,29 @@ import { Tunnel } from './tunneling/index.js' import { withBasicAuthCredentials } from './credentials/index.js' import { EnvMetadata, driverMetadataFilename } from './env-metadata.js' import { REMOTE_DIR_BASE } from './remote-files.js' -import { isPacked, pkgSnapshotDir } from './pkg.js' import { EnvId } from './env-id.js' import { addScriptInjectionsToServices } from './compose/script-injection.js' const require = createRequire(import.meta.url) const COMPOSE_TUNNEL_AGENT_DIR = path.join(path.dirname(require.resolve('@preevy/compose-tunnel-agent')), '..') -const baseDockerProxyService = () => { - const contextDir = isPacked() ? pkgSnapshotDir(path.join(import.meta.url, '../../compose-tunnel-agent')) : COMPOSE_TUNNEL_AGENT_DIR - return { - build: { - context: contextDir, - dockerfile: path.join(contextDir, 'Dockerfile'), - }, - ports: [ - { - mode: 'ingress', - target: COMPOSE_TUNNEL_AGENT_PORT, - published: '0', - protocol: 'tcp', - }, - ], - labels: { - [COMPOSE_TUNNEL_AGENT_SERVICE_LABELS.ACCESS]: 'private', +const baseDockerProxyService = () => ({ + build: { + context: COMPOSE_TUNNEL_AGENT_DIR, + dockerfile: path.join(COMPOSE_TUNNEL_AGENT_DIR, 'Dockerfile'), + }, + ports: [ + { + mode: 'ingress', + target: COMPOSE_TUNNEL_AGENT_PORT, + published: '0', + protocol: 'tcp', }, - } as ComposeService -} + ], + labels: { + [COMPOSE_TUNNEL_AGENT_SERVICE_LABELS.ACCESS]: 'private', + }, +} as ComposeService) export const addBaseComposeTunnelAgentService = ( model: ComposeModel, diff --git a/packages/core/src/driver/driver.ts b/packages/core/src/driver/driver.ts index 5cd7d2dc..bd94e838 100644 --- a/packages/core/src/driver/driver.ts +++ b/packages/core/src/driver/driver.ts @@ -17,7 +17,6 @@ export type MachineConnection = Disposable & { export type MachineDriver< Machine extends MachineBase = MachineBase, - ResourceType extends string = string > = { customizationScripts?: string[] friendlyName: string @@ -33,8 +32,6 @@ export type MachineDriver< ) => Promise<{ code: number } | { signal: string }> listMachines: () => AsyncIterableIterator - listDeletableResources: () => AsyncIterableIterator> - deleteResources: (wait: boolean, ...resource: Resource[]) => Promise machineStatusCommand: (machine: MachineBase) => Promise } @@ -43,7 +40,10 @@ export type MachineCreationResult = { result: Promise<{ machine: Machine; connection: MachineConnection }> } -export type MachineCreationDriver = { +export type MachineCreationDriver< + Machine extends MachineBase = MachineBase, + ResourceType extends string = string, +> = { metadata: Record createMachine: (args: { @@ -54,24 +54,30 @@ export type MachineCreationDriver = { getMachineAndSpecDiff: ( args: { envId: string }, ) => Promise<(Machine & { specDiff: SpecDiffItem[] }) | PartialMachine | undefined> + + listDeletableResources: () => AsyncIterableIterator> + deleteResources: (wait: boolean, ...resource: Resource[]) => Promise } export type MachineDriverFactory< Flags, Machine extends MachineBase = MachineBase, - ResourceType extends string = string > = ({ flags, profile, store, log, debug }: { flags: Flags profile: Profile store: Store log: Logger debug: boolean -}) => MachineDriver +}) => MachineDriver -export type MachineCreationDriverFactory = ({ flags, profile, store, log, debug }: { +export type MachineCreationDriverFactory< + Flags, + Machine extends MachineBase, + ResourceType extends string = string, +> = ({ flags, profile, store, log, debug }: { flags: Flags profile: Profile store: Store log: Logger debug: boolean -}) => MachineCreationDriver +}) => MachineCreationDriver diff --git a/packages/core/src/driver/machine-operations.ts b/packages/core/src/driver/machine-operations.ts index dad3ac29..14199731 100644 --- a/packages/core/src/driver/machine-operations.ts +++ b/packages/core/src/driver/machine-operations.ts @@ -53,7 +53,10 @@ const ensureBareMachine = async ({ return await withSpinner(async spinner => { if (existingMachine && recreating) { spinner.text = 'Deleting machine' - await machineDriver.deleteResources(false, { type: machineResourceType, providerId: existingMachine.providerId }) + await machineCreationDriver.deleteResources( + false, + { type: machineResourceType, providerId: existingMachine.providerId }, + ) } spinner.text = 'Checking for existing snapshot' const machineCreation = await machineCreationDriver.createMachine({ envId }) diff --git a/packages/core/src/pkg.ts b/packages/core/src/pkg.ts deleted file mode 100644 index 35d8f20e..00000000 --- a/packages/core/src/pkg.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { copyFileSync, existsSync, mkdirSync, mkdtempSync, readdirSync, statSync } from 'fs' -import { memoize } from 'lodash-es' -import { tmpdir } from 'os' -import path from 'path' - -declare let process : NodeJS.Process & { - pkg?: {} -} - -export const isPacked = () => process.pkg !== undefined - -export const pkgSnapshotDir = memoize((dir:string) => { - // can't use fs.cpSync because it's not patched by pkg (https://github.com/vercel/pkg/blob/bb042694e4289a1cbc530d2938babe35ccc84a93/prelude/bootstrap.js#L600) - const copyDirRecursiveSync = (sourceDir: string, targetDir:string) => { - if (!existsSync(targetDir)) { - mkdirSync(targetDir) - } - const files = readdirSync(sourceDir) - for (const file of files) { - const sourcePath = path.join(sourceDir, file) - const targetPath = path.join(targetDir, file) - const stat = statSync(sourcePath) - if (stat.isDirectory()) { - copyDirRecursiveSync(sourcePath, targetPath) - } else { - copyFileSync(sourcePath, targetPath) - } - } - } - const dest = mkdtempSync(path.join(tmpdir(), path.basename(dir))) - copyDirRecursiveSync(dir, dest) - return dest -}) diff --git a/packages/driver-azure/package.json b/packages/driver-azure/package.json index aecd81be..8e0b612c 100644 --- a/packages/driver-azure/package.json +++ b/packages/driver-azure/package.json @@ -1,6 +1,6 @@ { "name": "@preevy/driver-azure", - "version": "0.0.59", + "version": "0.0.60", "description": "Microsoft Azure Virtual Machine for Preevy", "type": "module", "exports": { @@ -22,7 +22,7 @@ "@azure/logger": "^1.0.4", "@inquirer/prompts": "^3.3.0", "@oclif/core": "^3.15.1", - "@preevy/core": "0.0.59", + "@preevy/core": "0.0.60", "inquirer-autocomplete-standalone": "^0.8.1", "iter-tools-es": "^7.5.3", "lodash-es": "^4.17.21" diff --git a/packages/driver-azure/src/driver/index.ts b/packages/driver-azure/src/driver/index.ts index 07686c45..59153cfc 100644 --- a/packages/driver-azure/src/driver/index.ts +++ b/packages/driver-azure/src/driver/index.ts @@ -87,48 +87,32 @@ const machineFromVm = ( } } +const listMachines = ({ client: cl }: { client: Client }) => asyncMap( + rg => cl.getInstanceByRg(rg.name as string).then(vm => { + if (vm) { + return machineFromVm(vm) + } + return { + type: machineResourceType, + providerId: rg.name as string, + envId: rg.tags?.[AzureCustomTags.ENV_ID] as string, + error: 'VM creation is incomplete', + } + }), + cl.listResourceGroups() +) + const machineDriver = ( { store, client: cl }: DriverContext, -): MachineDriver => { - const listMachines = () => asyncMap( - rg => cl.getInstanceByRg(rg.name as string).then(vm => { - if (vm) { - return machineFromVm(vm) - } - return { - type: machineResourceType, - providerId: rg.name as string, - envId: rg.tags?.[AzureCustomTags.ENV_ID] as string, - error: 'VM creation is incomplete', - } - }), - cl.listResourceGroups() - ) - - return ({ - customizationScripts: CUSTOMIZE_BARE_MACHINE, - friendlyName: 'Microsoft Azure', - getMachine: async ({ envId }) => await cl.getInstance(envId).then(vm => machineFromVm(vm)), - - listMachines, - listDeletableResources: listMachines, - - deleteResources: async (wait, ...resources) => { - await Promise.all(resources.map(({ type, providerId }) => { - if (type === machineResourceType) { - return cl.deleteResourcesResourceGroup(providerId, wait) - } - throw new Error(`Unknown resource type "${type}"`) - })) - }, - - resourcePlurals: {}, - - ...sshDriver({ getSshKey: () => getStoredSshKey(store, SSH_KEYPAIR_ALIAS) }), - - machineStatusCommand: async () => machineStatusNodeExporterCommand, - }) -} +): MachineDriver => ({ + customizationScripts: CUSTOMIZE_BARE_MACHINE, + friendlyName: 'Microsoft Azure', + getMachine: async ({ envId }) => await cl.getInstance(envId).then(vm => machineFromVm(vm)), + listMachines: () => listMachines({ client: cl }), + resourcePlurals: {}, + ...sshDriver({ getSshKey: () => getStoredSshKey(store, SSH_KEYPAIR_ALIAS) }), + machineStatusCommand: async () => machineStatusNodeExporterCommand, +}) const flags = { region: Flags.string({ @@ -143,7 +127,7 @@ const flags = { type FlagTypes = Omit, 'json'> -const inquireFlags = async () => { +const inquireFlags = async ({ log: _log }: { log: Logger }) => { const region = await inquirerAutoComplete({ message: flags.region.description as string, source: async input => REGIONS.filter(r => !input || r.includes(input.toLowerCase())).map(value => ({ value })), @@ -191,7 +175,7 @@ type MachineCreationContext = DriverContext & { const machineCreationDriver = ( { client: cl, vmSize, store, log, debug, metadata }: MachineCreationContext, -): MachineCreationDriver => { +): MachineCreationDriver => { const ssh = sshDriver({ getSshKey: () => getStoredSshKey(store, SSH_KEYPAIR_ALIAS) }) return { @@ -241,13 +225,21 @@ const machineCreationDriver = ( : [], }) }, + listDeletableResources: () => listMachines({ client: cl }), + deleteResources: async (wait, ...resources) => { + await Promise.all(resources.map(({ type, providerId }) => { + if (type === machineResourceType) { + return cl.deleteResourcesResourceGroup(providerId, wait) + } + throw new Error(`Unknown resource type "${type}"`) + })) + }, } } const factory: MachineDriverFactory< Interfaces.InferredFlags, - SshMachine, - ResourceType + SshMachine > = ({ flags: f, profile: { id: profileId }, store, log, debug }) => machineDriver({ client: createClient({ ...contextFromFlags(f), @@ -267,7 +259,8 @@ const machineCreationContextFromFlags = ( const machineCreationFactory: MachineCreationDriverFactory< MachineCreationFlagTypes, - SshMachine + SshMachine, + ResourceType > = ({ flags: f, profile: { id: profileId }, store, log, debug }) => { const c = machineCreationContextFromFlags(f) return machineCreationDriver({ diff --git a/packages/driver-gce/package.json b/packages/driver-gce/package.json index 3f41ae80..3c2ca384 100644 --- a/packages/driver-gce/package.json +++ b/packages/driver-gce/package.json @@ -1,6 +1,6 @@ { "name": "@preevy/driver-gce", - "version": "0.0.59", + "version": "0.0.60", "description": "Google Compute Engine driver for Preevy", "type": "module", "exports": { @@ -17,7 +17,7 @@ "@google-cloud/storage": "^6.9.5", "@inquirer/prompts": "^3.3.0", "@oclif/core": "^3.15.1", - "@preevy/core": "0.0.59", + "@preevy/core": "0.0.60", "google-auth-library": "^8.7.0", "google-gax": "^4.0.5", "inquirer-autocomplete-standalone": "^0.8.1", diff --git a/packages/driver-gce/src/driver/index.ts b/packages/driver-gce/src/driver/index.ts index cb5f0520..d5747673 100644 --- a/packages/driver-gce/src/driver/index.ts +++ b/packages/driver-gce/src/driver/index.ts @@ -16,7 +16,7 @@ import { extractDefined, PartialMachine, } from '@preevy/core' -import { memoize, pick } from 'lodash-es' +import { pick } from 'lodash-es' import createClient, { Client, Instance, availableRegions, defaultProjectId, instanceError, shortResourceName } from './client.js' import { deserializeMetadata, metadataKey } from './metadata.js' import { LABELS } from './labels.js' @@ -59,34 +59,22 @@ const machineFromInstance = ( } } -const machineDriver = ({ store, client }: DriverContext): MachineDriver => { - const listMachines = () => asyncMap(machineFromInstance, client.listInstances()) +const listMachines = ({ client }: { client: Client }) => asyncMap(machineFromInstance, client.listInstances()) - return ({ - friendlyName: 'Google Cloud', - - getMachine: async ({ envId }) => { - const instance = await client.findBestEnvInstance(envId) - return instance && machineFromInstance(instance) - }, +const machineDriver = ({ store, client }: DriverContext): MachineDriver => ({ + friendlyName: 'Google Cloud', - listMachines, - listDeletableResources: listMachines, + getMachine: async ({ envId }) => { + const instance = await client.findBestEnvInstance(envId) + return instance && machineFromInstance(instance) + }, - deleteResources: async (wait, ...resources) => { - await Promise.all(resources.map(({ type, providerId }) => { - if (type === 'machine') { - return client.deleteInstance(providerId, wait) - } - throw new Error(`Unknown resource type: "${type}"`) - })) - }, + listMachines: () => listMachines({ client }), - resourcePlurals: {}, - ...sshDriver({ getSshKey: () => getStoredSshKey(store, SSH_KEYPAIR_ALIAS) }), - machineStatusCommand: async () => machineStatusNodeExporterCommand, - }) -} + resourcePlurals: {}, + ...sshDriver({ getSshKey: () => getStoredSshKey(store, SSH_KEYPAIR_ALIAS) }), + machineStatusCommand: async () => machineStatusNodeExporterCommand, +}) const flags = { 'project-id': Flags.string({ @@ -109,7 +97,7 @@ const contextFromFlags = ({ zone, }) -const inquireFlags = async () => { +const inquireFlags = async ({ log: _log }: { log: Logger }) => { const project = await inquirer.input({ default: await defaultProjectId(), message: flags['project-id'].description as string, @@ -161,7 +149,7 @@ type MachineCreationDriverContext = DriverContext & { const machineCreationDriver = ( { machineType: specifiedMachineType, store, client, log, debug, metadata }: MachineCreationDriverContext, -): MachineCreationDriver => { +): MachineCreationDriver => { const machineType = specifiedMachineType || DEFAULT_MACHINE_TYPE const ssh = sshDriver({ getSshKey: () => getStoredSshKey(store, SSH_KEYPAIR_ALIAS) }) @@ -211,13 +199,23 @@ const machineCreationDriver = ( : [], } }, + + listDeletableResources: () => listMachines({ client }), + + deleteResources: async (wait, ...resources) => { + await Promise.all(resources.map(({ type, providerId }) => { + if (type === 'machine') { + return client.deleteInstance(providerId, wait) + } + throw new Error(`Unknown resource type: "${type}"`) + })) + }, }) } const factory: MachineDriverFactory< Interfaces.InferredFlags, - SshMachine, - ResourceType + SshMachine > = ({ flags: f, profile: { id: profileId }, store, log, debug }) => machineDriver({ log, debug, @@ -228,7 +226,8 @@ machineDriver.factory = factory const machineCreationFactory: MachineCreationDriverFactory< Interfaces.InferredFlags, - SshMachine + SshMachine, + ResourceType > = ({ flags: f, profile: { id: profileId }, store, log, debug }) => machineCreationDriver({ metadata: pick(f, Object.keys(machineCreationFlags)) as MachineCreationFlagTypes, // filter out non-driver flags log, diff --git a/packages/driver-kube-pod/package.json b/packages/driver-kube-pod/package.json index 1e525c99..f5d4b202 100644 --- a/packages/driver-kube-pod/package.json +++ b/packages/driver-kube-pod/package.json @@ -1,6 +1,6 @@ { "name": "@preevy/driver-kube-pod", - "version": "0.0.59", + "version": "0.0.60", "description": "Kubernetes single Pod driver for Preevy", "exports": { ".": "./dist/index.js" @@ -16,8 +16,8 @@ "@inquirer/prompts": "^3.3.0", "@kubernetes/client-node": "^0.18.1", "@oclif/core": "^3.15.1", - "@preevy/common": "0.0.59", - "@preevy/core": "0.0.59", + "@preevy/common": "0.0.60", + "@preevy/core": "0.0.60", "fast-safe-stringify": "^2.1.1", "is-stream": "^2.0.1", "iter-tools-es": "^7.5.3", diff --git a/packages/driver-kube-pod/src/driver/client/common.ts b/packages/driver-kube-pod/src/driver/client/common.ts index 31459580..ab5602bd 100644 --- a/packages/driver-kube-pod/src/driver/client/common.ts +++ b/packages/driver-kube-pod/src/driver/client/common.ts @@ -13,4 +13,5 @@ export const bodyOrUndefined = async { const list = ( - types: { apiVersion: string; kind: string; namespace?: string }[], + types: KubernetesType[], { fieldSelector, labelSelector }: { fieldSelector?: string labelSelector?: string @@ -36,21 +42,19 @@ const dynamicApi = ( ), ))) - const gatherTypes = (...specs: k8s.KubernetesObject[]) => { + const uniqueTypes = (types: KubernetesType[]): KubernetesType[] => [ + ...new Map(types.map(t => [[t.apiVersion, t.kind, t.namespace].join(':'), t])).values(), + ] + + const gatherTypes = (...specs: k8s.KubernetesObject[]): KubernetesType[] => { const docs = specs.map(s => ensureDefined(s, 'apiVersion', 'kind', 'metadata')) - type Doc = HasRequired - const key = ({ apiVersion, kind, metadata: { namespace } }: Doc) => [apiVersion, kind, namespace].join(':') - const uniques = new Map(docs.map(d => [key(d), { - apiVersion: d.apiVersion, - kind: d.kind, - namespace: d.metadata.namespace, - }])).values() - return [...uniques] + return uniqueTypes(docs.map(({ apiVersion, kind, metadata: { namespace } }) => ({ apiVersion, kind, namespace }))) } return { list, gatherTypes, + uniqueTypes, apply: apply({ client, wrap }), waiter: (watcher: k8s.Watch) => waiter({ watcher, client }), } diff --git a/packages/driver-kube-pod/src/driver/client/dynamic/wait.ts b/packages/driver-kube-pod/src/driver/client/dynamic/wait.ts index 552c5859..36e502b5 100644 --- a/packages/driver-kube-pod/src/driver/client/dynamic/wait.ts +++ b/packages/driver-kube-pod/src/driver/client/dynamic/wait.ts @@ -10,11 +10,11 @@ const waiter = ({ watcher, client }: { watcher: k8s.Watch; client: k8s.Kubernete eventPredicate: (phase: string, apiObj: T) => boolean = () => true, ) => { const path = new URL(await urlGetter(o)).pathname - const { name, namespace } = ensureDefined(extractDefined(o, 'metadata'), 'name', 'namespace') + const { name, namespace } = ensureDefined(extractDefined(o, 'metadata'), 'name') // namespace can be undefined let abort: () => void return await new Promise(resolve => { void watcher.watch(path, {}, (phase, apiObj: T) => { - const metadata = ensureDefined(extractDefined(apiObj, 'metadata'), 'name') + const metadata = ensureDefined(extractDefined(apiObj, 'metadata'), 'name') // namespace can be undefined if ( metadata.name === name && metadata.namespace === namespace diff --git a/packages/driver-kube-pod/src/driver/client/index.ts b/packages/driver-kube-pod/src/driver/client/index.ts index 21b4ad18..1427d26a 100644 --- a/packages/driver-kube-pod/src/driver/client/index.ts +++ b/packages/driver-kube-pod/src/driver/client/index.ts @@ -9,9 +9,13 @@ import { maxBy } from 'lodash-es' import { inspect } from 'util' import { Logger } from '@preevy/core' import baseExec from './exec/index.js' -import dynamicApi, { ApplyFilter, applyStrategies, compositeApplyFilter } from './dynamic/index.js' +import dynamicApi, { ApplyFilter, KubernetesType, applyStrategies, compositeApplyFilter } from './dynamic/index.js' import basePortForward from './port-forward.js' -import k8sHelpers from './k8s-helpers.js' +import { + podHelpers as createPodHelpers, + appsV1ApiHelpers as createAppsV1ApiHelpers, + coreV1ApiHelpers as createCoreV1ApiHelpers, +} from './k8s-helpers.js' import { LABELS, addEnvMetadata, @@ -23,15 +27,16 @@ import { extractTemplateHash, extractCreatedAt, extractName, - isDockerHostDeployment, - ANNOTATIONS, + isDockerHostStatefulSet, + addAllTypesAnnotation, + readAllTypesAnnotation, } from './metadata.js' import { Package } from './common.js' import { logError } from './log-error.js' const stringify = stringifyModule.default -export const loadKubeConfig = (kubeconfig?: string, context?: string) => { +export const loadKubeConfig = ({ kubeconfig, context }: { kubeconfig?: string; context?: string }) => { const kc = new k8s.KubeConfig() if (kubeconfig) { kc.loadFromFile(kubeconfig) @@ -44,86 +49,228 @@ export const loadKubeConfig = (kubeconfig?: string, context?: string) => { return kc } -export class DuplicateDockerHostDeployment extends Error { +export class DuplicateDockerHostStatefulSet extends Error { constructor(readonly dups: [k8s.KubernetesObject, k8s.KubernetesObject]) { - super(`Duplicate Docker host Deployments found: ${inspect(dups)}`) + super(`Duplicate Docker host StatefulSets found: ${inspect(dups)}`) } } -const ensureSingleDockerHostDeployment = (): ApplyFilter => { - let deployment: k8s.KubernetesObject +const ensureSingleDockerHostStatefulSet = ( + transform: (o: k8s.V1StatefulSet) => k8s.V1StatefulSet = o => o, +): ApplyFilter => { + let statefulSet: k8s.KubernetesObject return s => { - if (isDockerHostDeployment(s)) { - if (deployment) { - throw new DuplicateDockerHostDeployment([deployment, s]) + if (isDockerHostStatefulSet(s)) { + if (statefulSet) { + throw new DuplicateDockerHostStatefulSet([statefulSet, s]) } - deployment = s + statefulSet = transform(s) } return s } } -const kubeClient = ({ log, namespace, kc, profileId, template, package: packageDetails, kubeconfig }: { +export const kubeClient = ({ + log, + namespace, + kc, + profileId, + kubeconfig, +}: { log: Logger kc: k8s.KubeConfig kubeconfig?: string namespace: string profileId: string +}) => { + const wrap = logError(log) + const k8sApi = kc.makeApiClient(k8s.CoreV1Api) + const k8sAppsApi = kc.makeApiClient(k8s.AppsV1Api) + + const podHelpers = createPodHelpers({ k8sApi, k8sAppsApi, wrap }) + const appsV1ApiHelpers = createAppsV1ApiHelpers(k8sAppsApi, { wrap }) + const coreV1ApiHelpers = createCoreV1ApiHelpers(k8sApi, { wrap }) + + const listEnvStatefulSets = ( + envId: string, + deleted?: boolean, + ) => appsV1ApiHelpers.listStatefulSets({ + namespace, + ...envSelector({ profileId, envId, deleted, dockerHost: true }), + }) + + const listEnvDeployments = ( + envId: string, + deleted?: boolean, + ) => appsV1ApiHelpers.listDeployments({ + namespace, + ...envSelector({ profileId, envId, deleted, dockerHost: true }), + }) + + const findMostRecentDeployment = async ({ envId, deleted }: { + envId: string + deleted?: boolean + }): Promise => maxBy( + await asyncToArray(listEnvDeployments(envId, deleted)), + extractCreatedAt, + ) + + const findMostRecentStatefulSet = async ({ envId, deleted }: { + envId: string + deleted?: boolean + }): Promise => maxBy( + await asyncToArray(listEnvStatefulSets(envId, deleted)), + extractCreatedAt, + ) + + const findEnvObject = async (args: { + envId: string + deleted?: boolean + }): Promise => await findMostRecentStatefulSet(args) + ?? await findMostRecentDeployment(args) + + const portForward = async ( + statefulSet: k8s.V1StatefulSet, + targetPort: number, + listenAddress: number | string | ListenOptions, + ) => { + const forward = new k8s.PortForward(kc) + const pod = await podHelpers.findReadyPodForStatefulSet(statefulSet) + const podName = extractName(pod) + return await basePortForward({ namespace, forward, log })(podName, targetPort, listenAddress) + } + + const apiServiceClusterAddress = async (): Promise<[string, number] | undefined> => { + const service = await asyncFirst(coreV1ApiHelpers.listServices({ + namespace: 'default', + fieldSelector: 'metadata.name=kubernetes', + })) + const [host, port] = [service?.spec?.clusterIP, service?.spec?.ports?.[0]?.port] + if (host === undefined || port === undefined) { + return undefined + } + return [host, port] + } + + return { + findEnvObject, + findMostRecentDeployment, + findMostRecentStatefulSet, + listProfileStatefulSets: () => appsV1ApiHelpers.listStatefulSets({ namespace, ...profileSelector({ profileId }) }), + listProfileDeployments: () => appsV1ApiHelpers.listDeployments({ namespace, ...profileSelector({ profileId }) }), + exec: baseExec({ kubeConfig: kc, kubeconfigLocation: kubeconfig, namespace, log }), + findReadyPod: podHelpers.findReadyPod, + portForward, + apiServiceClusterAddress, + } +} + +export type Client = ReturnType + +export const kubeCreationClient = ({ + log, + namespace, + kc, + profileId, + template, + package: packageDetails, + storageClass, + storageSize, +}: { + log: Logger + kc: k8s.KubeConfig + namespace: string + profileId: string template: Buffer | string | Promise package: Package | Promise + storageClass: string | undefined + storageSize: number }) => { const wrap = logError(log) - const k8sApi = kc.makeApiClient(k8s.CoreV1Api) const k8sAppsApi = kc.makeApiClient(k8s.AppsV1Api) const k8sObjApi = kc.makeApiClient(k8s.KubernetesObjectApi) const watcher = new k8s.Watch(kc) - const helpers = k8sHelpers({ k8sApi, k8sAppsApi, wrap }) + const appsV1ApiHelpers = createAppsV1ApiHelpers(k8sAppsApi, { wrap }) - const { apply, gatherTypes, list: dynamicList, waiter } = dynamicApi({ client: k8sObjApi, wrap }) + const { apply, gatherTypes, uniqueTypes, list: dynamicList, waiter } = dynamicApi({ client: k8sObjApi, wrap }) const renderTemplate = async ({ instance }: { instance: string }) => { const specsStr = nunjucks.renderString((await template).toString('utf-8'), { id: instance, namespace, + storageClass, + storageSize, + labels: { + [LABELS.PROFILE_ID]: profileId, + [LABELS.INSTANCE]: instance, + }, }) return yaml.parseAllDocuments(specsStr).map(d => d.toJS() as k8s.KubernetesObject) } - const calcTemplateHash = async ({ instance }: { instance: string }) => `sha1:${createHash('sha1').update( - stringify.stableStringify(await renderTemplate({ instance })) + const calcTemplateHash = async ( + args: { instance: string } | { specs: k8s.KubernetesObject[] }, + ) => `sha1:${createHash('sha1').update( + stringify.stableStringify('instance' in args ? await renderTemplate(args) : args.specs) ).digest('base64')}` - const listInstanceObjects = async (instance: string) => dynamicList( - gatherTypes(...await renderTemplate({ instance: '' })), - { ...instanceSelector({ instance }) }, - ) + const findInstanceStatefulSet = async (instance: string) => { + const statefulSet = await asyncFirst(appsV1ApiHelpers.listStatefulSets({ + namespace, + ...instanceSelector({ instance }), + })) - const findInstanceDeployment = async (instance: string) => { - const deployment = await asyncFirst(helpers.listDeployments({ namespace, ...instanceSelector({ instance }) })) - if (!deployment) { - throw new Error(`Cannot find deployment with label "${LABELS.INSTANCE}": "${instance}" in namespace "${namespace}"`) + if (!statefulSet) { + throw new Error(`Cannot find StatefulSet with label "${LABELS.INSTANCE}": "${instance}" in namespace "${namespace}"`) } - return deployment + return statefulSet } + const findInstanceAllTypesFromMetadata = async (instance: string): Promise => { + const statefulSet = await findInstanceStatefulSet(instance).catch(() => undefined) + const allTypes = statefulSet ? readAllTypesAnnotation(statefulSet) : undefined + return (allTypes ?? []).map(t => ({ ...t, namespace })) + } + + const findInstanceAllTypes = async (instance: string): Promise => uniqueTypes([ + ...await findInstanceAllTypesFromMetadata(instance), + ...gatherTypes(...await renderTemplate({ instance: '' })), + { kind: 'Deployment', apiVersion: 'apps/v1', namespace }, // backwards compatibility with Deployment-based envs + ]) + + const listInstanceObjects = async ( + instance: string, + ) => dynamicList( + await findInstanceAllTypes(instance), + { ...instanceSelector({ instance }) }, + ) + const createEnv = async ( envId: string, { serverSideApply }: { serverSideApply: boolean }, ) => { const instance = envRandomName({ envId, profileId }) const specs = await renderTemplate({ instance }) + const templateTypes = gatherTypes(...specs) + .map(({ kind, apiVersion, namespace: ns }) => ({ kind, apiVersion, namespaced: ns !== undefined })) + + const allTypes = uniqueTypes([ + { kind: 'PersistentVolumeClaim', apiVersion: 'v1', namespace }, // PVC associated with StatefulSet (they are not part of the template) + ...templateTypes, + ]) + log.debug('createEnv: apply', instance, inspect(specs, { depth: null })) await apply(specs, { filter: compositeApplyFilter( - ensureSingleDockerHostDeployment(), + ensureSingleDockerHostStatefulSet(s => addAllTypesAnnotation(s, allTypes)), addEnvMetadata({ profileId, envId, createdAt: new Date(), instance, package: await packageDetails, - templateHash: await calcTemplateHash({ instance }), + templateHash: await calcTemplateHash({ specs }), }) ), strategy: serverSideApply @@ -131,17 +278,12 @@ const kubeClient = ({ log, namespace, kc, profileId, template, package: packageD : applyStrategies.clientSideApply, }) - log.debug('createEnv: findInstanceDeployment', instance) - const deployment = await findInstanceDeployment(instance) - - // objects returned by the list API missing 'kind' and 'apiVersion' props - // https://github.com/kubernetes/kubernetes/issues/3030 - deployment.kind ??= deployment.metadata?.annotations?.[ANNOTATIONS.KUBERNETES_KIND] ?? 'Deployment' - deployment.apiVersion ??= deployment.metadata?.annotations?.[ANNOTATIONS.KUERBETES_API_VERSION] ?? 'apps/v1' + log.debug('createEnv: findInstanceStatefulSet', instance) + const statefulSet = await findInstanceStatefulSet(instance) return await waiter(watcher).waitForEvent( - deployment, - (_phase, d) => Boolean(d.status?.conditions?.some(({ type, status }) => type === 'Available' && status === 'True')), + statefulSet, + (_phase, ss) => ss.status?.readyReplicas === ss.spec?.replicas, ) } @@ -157,62 +299,15 @@ const kubeClient = ({ log, namespace, kc, profileId, template, package: packageD await apply(objects, { strategy: wait ? applyStrategies.deleteAndWait(watcher) : applyStrategies.delete }) } - const listEnvDeployments = ( - envId: string, - deleted?: boolean, - ) => helpers.listDeployments({ - namespace, - ...envSelector({ profileId, envId, deleted, dockerHost: true }), - }) - - const findMostRecentDeployment = async ({ envId, deleted }: { - envId: string - deleted?: boolean - }): Promise => maxBy( - await asyncToArray(listEnvDeployments(envId, deleted)), - extractCreatedAt, - ) - - const portForward = async ( - deployment: k8s.V1Deployment, - targetPort: number, - listenAddress: number | string | ListenOptions, - ) => { - const forward = new k8s.PortForward(kc) - const pod = await helpers.findReadyPodForDeployment(deployment) - const podName = extractName(pod) - return await basePortForward({ namespace, forward, log })(podName, targetPort, listenAddress) - } - - const apiServiceClusterAddress = async (): Promise<[string, number] | undefined> => { - const service = await asyncFirst(helpers.listServices({ - namespace: 'default', - fieldSelector: 'metadata.name=kubernetes', - })) - const [host, port] = [service?.spec?.clusterIP, service?.spec?.ports?.[0]?.port] - if (host === undefined || port === undefined) { - return undefined - } - return [host, port] - } - return { - findMostRecentDeployment, - listProfileDeployments: () => helpers.listDeployments({ namespace, ...profileSelector({ profileId }) }), - exec: baseExec({ kubeConfig: kc, kubeconfigLocation: kubeconfig, namespace, log }), - findReadyPodForDeployment: helpers.findReadyPodForDeployment, createEnv, deleteEnv, - portForward, extractTemplateHash, calcTemplateHash, - apiServiceClusterAddress, } } -export type Client = ReturnType +export type CreationClient = ReturnType export { extractInstance, extractEnvId, extractName, extractNamespace, extractTemplateHash } from './metadata.js' export { DeploymentNotReadyError, DeploymentNotReadyErrorReason } from './k8s-helpers.js' - -export default kubeClient diff --git a/packages/driver-kube-pod/src/driver/client/k8s-helpers.ts b/packages/driver-kube-pod/src/driver/client/k8s-helpers.ts index f266dbce..1e032dd4 100644 --- a/packages/driver-kube-pod/src/driver/client/k8s-helpers.ts +++ b/packages/driver-kube-pod/src/driver/client/k8s-helpers.ts @@ -1,8 +1,9 @@ import * as k8s from '@kubernetes/client-node' import { ensureDefined, extractDefined } from '@preevy/core' -import { asyncFilter, asyncFirst, asyncToArray } from 'iter-tools-es' +import { asyncFilter, asyncFind, asyncFirst, asyncMap, asyncToArray } from 'iter-tools-es' import { paginationIterator } from './pagination.js' import { FuncWrapper } from './log-error.js' +import { ANNOTATIONS, extractNameAndNamespace } from './metadata.js' export type DeploymentNotReadyErrorReason = 'NoRevision' | 'NoReplicaSet' | 'NoReadyPod' export class DeploymentNotReadyError extends Error { @@ -11,24 +12,86 @@ export class DeploymentNotReadyError extends Error { } } -export default ( - { k8sAppsApi, k8sApi, wrap }: { - k8sAppsApi: k8s.AppsV1Api - k8sApi: k8s.CoreV1Api - wrap: FuncWrapper +export class StatefulSetNotReadyError extends Error { + constructor(statefulSet: Pick) { + super(`No ready pod found for StatefulSet "${statefulSet.metadata?.namespace}/${statefulSet.metadata?.name}"`) } +} + +const readyPodPredicate = (p: k8s.V1Pod) => Boolean(p.status?.conditions?.some(c => c.type === 'Ready' && c.status === 'True')) + +// objects returned by the list API missing 'kind' and 'apiVersion' props +// https://github.com/kubernetes/kubernetes/issues/3030 +const completeMissingListFields = ( + { kind, apiVersion }: { kind: string; apiVersion: string }, +) => (o: T) => { + o.kind ??= o.metadata?.annotations?.[ANNOTATIONS.KUBERNETES_KIND] ?? kind + o.apiVersion ??= o.metadata?.annotations?.[ANNOTATIONS.KUERBETES_API_VERSION] ?? apiVersion + return o + } + +const completeMissingListFieldsAsyncIter = ( + fields: { kind: string; apiVersion: string }, + asyncIterator: AsyncIterable, +) => asyncMap( + completeMissingListFields(fields), + asyncIterator, + ) + +export const storageV1ApiHelpers = ( + storageApi: k8s.StorageV1Api, + { wrap = f => f }: { wrap?: FuncWrapper } = {} ) => { - const listDeployments = ( + const listStorageClasses = ( + { fieldSelector, labelSelector, resourceVersion, timeoutSeconds, watch }: { + fieldSelector?: string + labelSelector?: string + resourceVersion?: string + timeoutSeconds?: number + watch?: boolean + }, + ) => completeMissingListFieldsAsyncIter( + { kind: 'StorageClass', apiVersion: 'storage.k8s.io/v1' }, + paginationIterator( + wrap(continueToken => storageApi.listStorageClass( + undefined, + undefined, + continueToken, + fieldSelector, + labelSelector, + undefined, + resourceVersion, + undefined, + timeoutSeconds, + watch, + )), + ) + ) + + const findDefaultStorageClass = (storageClasses: k8s.V1StorageClass[]) => { + const defaultStorageClass = storageClasses.find(sc => sc?.metadata?.annotations?.['storageclass.kubernetes.io/is-default-class'] === 'true') + return defaultStorageClass + } + + return { listStorageClasses, findDefaultStorageClass } +} + +export const coreV1ApiHelpers = ( + k8sApi: k8s.CoreV1Api, + { wrap = f => f }: { wrap?: FuncWrapper } = {} +) => { + const listPods = ( { namespace, fieldSelector, labelSelector, resourceVersion, timeoutSeconds, watch }: { namespace: string + namespaceOverride?: string fieldSelector?: string labelSelector?: string resourceVersion?: string timeoutSeconds?: number watch?: boolean }, - ) => paginationIterator( - wrap(continueToken => k8sAppsApi.listNamespacedDeployment( + ) => completeMissingListFieldsAsyncIter({ kind: 'Pod', apiVersion: 'v1' }, paginationIterator( + wrap(continueToken => k8sApi.listNamespacedPod( namespace, undefined, undefined, @@ -41,9 +104,9 @@ export default ( timeoutSeconds, watch, )), - ) + )) - const listReplicaSets = ( + const listServices = ( { namespace, fieldSelector, labelSelector, resourceVersion, timeoutSeconds, watch }: { namespace: string fieldSelector?: string @@ -52,8 +115,8 @@ export default ( timeoutSeconds?: number watch?: boolean }, - ) => paginationIterator( - wrap(continueToken => k8sAppsApi.listNamespacedReplicaSet( + ) => completeMissingListFieldsAsyncIter({ kind: 'Service', apiVersion: 'v1' }, paginationIterator( + wrap(continueToken => k8sApi.listNamespacedService( namespace, undefined, undefined, @@ -66,20 +129,29 @@ export default ( timeoutSeconds, watch, )), - ) + )) - const listPods = ( + return { + listPods, + listServices, + } +} + +export const appsV1ApiHelpers = ( + k8sAppsApi: k8s.AppsV1Api, + { wrap = f => f }: { wrap?: FuncWrapper } = {} +) => { + const listStatefulSets = ( { namespace, fieldSelector, labelSelector, resourceVersion, timeoutSeconds, watch }: { namespace: string - namespaceOverride?: string fieldSelector?: string labelSelector?: string resourceVersion?: string timeoutSeconds?: number watch?: boolean }, - ) => paginationIterator( - wrap(continueToken => k8sApi.listNamespacedPod( + ) => completeMissingListFieldsAsyncIter({ kind: 'StatefulSet', apiVersion: 'apps/v1' }, paginationIterator( + wrap(continueToken => k8sAppsApi.listNamespacedStatefulSet( namespace, undefined, undefined, @@ -92,9 +164,9 @@ export default ( timeoutSeconds, watch, )), - ) + )) - const listServices = ( + const listDeployments = ( { namespace, fieldSelector, labelSelector, resourceVersion, timeoutSeconds, watch }: { namespace: string fieldSelector?: string @@ -103,8 +175,8 @@ export default ( timeoutSeconds?: number watch?: boolean }, - ) => paginationIterator( - wrap(continueToken => k8sApi.listNamespacedService( + ) => completeMissingListFieldsAsyncIter({ kind: 'Deployment', apiVersion: 'apps/v1' }, paginationIterator( + wrap(continueToken => k8sAppsApi.listNamespacedDeployment( namespace, undefined, undefined, @@ -117,10 +189,75 @@ export default ( timeoutSeconds, watch, )), - ) + )) + + const listReplicaSets = ( + { namespace, fieldSelector, labelSelector, resourceVersion, timeoutSeconds, watch }: { + namespace: string + fieldSelector?: string + labelSelector?: string + resourceVersion?: string + timeoutSeconds?: number + watch?: boolean + }, + ) => completeMissingListFieldsAsyncIter({ kind: 'ReplicaSet', apiVersion: 'apps/v1' }, paginationIterator( + wrap(continueToken => k8sAppsApi.listNamespacedReplicaSet( + namespace, + undefined, + undefined, + continueToken, + fieldSelector, + labelSelector, + undefined, + resourceVersion, + undefined, + timeoutSeconds, + watch, + )), + )) + + return { + listStatefulSets, + listDeployments, + listReplicaSets, + } +} + +export const podHelpers = ( + { k8sAppsApi, k8sApi, wrap }: { + k8sAppsApi: k8s.AppsV1Api + k8sApi: k8s.CoreV1Api + wrap: FuncWrapper + } +) => { + const { listPods } = coreV1ApiHelpers(k8sApi, { wrap }) + const { listReplicaSets } = appsV1ApiHelpers(k8sAppsApi, { wrap }) + + const listPodsForStatefulSet = (ss: k8s.V1StatefulSet) => { + const { name, namespace } = extractNameAndNamespace(ss) + const { matchLabels } = ensureDefined(extractDefined(extractDefined(ss, 'spec'), 'selector'), 'matchLabels') + const labelSelector = Object.entries(matchLabels).map(([k, v]) => `${k}=${v}`).join(',') + return asyncFilter( + pod => Boolean(pod.metadata?.ownerReferences?.some(ref => ref.kind === 'StatefulSet' && ref.name === name)), + listPods({ + namespace: namespace || '', + labelSelector, + }), + ) + } + + const findReadyPodForStatefulSet = async ( + ss: k8s.V1StatefulSet, + ) => { + const pod = await asyncFind(readyPodPredicate, listPodsForStatefulSet(ss)) + if (!pod) { + throw new StatefulSetNotReadyError(ss) + } + return pod + } const findReplicaSetForDeployment = async (deployment: Pick) => { - const { name, namespace, annotations } = ensureDefined(extractDefined(deployment, 'metadata'), 'name', 'annotations', 'labels') + const { name, namespace, annotations } = ensureDefined(extractDefined(deployment, 'metadata'), 'name', 'namespace', 'annotations', 'labels') const revision = annotations['deployment.kubernetes.io/revision'] if (!revision) { throw new DeploymentNotReadyError(deployment, 'NoRevision') @@ -151,18 +288,23 @@ export default ( const findReadyPodForDeployment = async (deployment: Pick) => { const allPods = await asyncToArray(await listPodsForDeployment(deployment)) - const pod = allPods.find(p => p.status?.conditions?.some(c => c.type === 'Ready' && c.status === 'True')) + const pod = allPods.find(readyPodPredicate) if (!pod) { throw new DeploymentNotReadyError(deployment, 'NoReadyPod') } return pod } + const findReadyPod = async (obj: Pick | k8s.V1StatefulSet) => { + if (obj.kind === 'Deployment') { + return await findReadyPodForDeployment(obj as k8s.V1Deployment) + } + return await findReadyPodForStatefulSet(obj as k8s.V1StatefulSet) + } + return { - listDeployments, - listReplicaSets, - listPods, + findReadyPodForStatefulSet, findReadyPodForDeployment, - listServices, + findReadyPod, } } diff --git a/packages/driver-kube-pod/src/driver/client/metadata.test.ts b/packages/driver-kube-pod/src/driver/client/metadata.test.ts index 5f68e0e2..969fdf7e 100644 --- a/packages/driver-kube-pod/src/driver/client/metadata.test.ts +++ b/packages/driver-kube-pod/src/driver/client/metadata.test.ts @@ -32,7 +32,7 @@ describe('metadata', () => { const createName = () => envRandomName({ envId: repeat('a', 100), profileId: '1myprofile' }) it('should truncate it to the correct length', () => { const name = createName() - expect(name).toHaveLength(53) // max name length with 10 chars spare + expect(name).toHaveLength(48) // max name length with 15 chars spare expect(name).toMatch(/^a1myprofile-a+-[a-z0-9]{5}$/) }) diff --git a/packages/driver-kube-pod/src/driver/client/metadata.ts b/packages/driver-kube-pod/src/driver/client/metadata.ts index aa019e36..b5ff3069 100644 --- a/packages/driver-kube-pod/src/driver/client/metadata.ts +++ b/packages/driver-kube-pod/src/driver/client/metadata.ts @@ -1,7 +1,10 @@ import * as k8s from '@kubernetes/client-node' -import { extractDefined, randomString, truncatePrefix } from '@preevy/core' +import { ensureDefined, extractDefined, randomString, truncatePrefix } from '@preevy/core' +import { pick } from 'lodash-es' +import { tryParseJson } from '@preevy/common' import { sanitizeLabel, sanitizeLabels } from './labels.js' import { HasMetadata, Package } from './common.js' +import { KubernetesType } from './dynamic/index.js' export const MAX_LABEL_LENGTH = 63 @@ -27,6 +30,7 @@ export const ANNOTATIONS = { KUBERNETES_KIND: `${PREEVY_PREFIX}/kubernetes-kind`, KUERBETES_API_VERSION: `${PREEVY_PREFIX}/kubernetes-api-version`, DEPLOYMENT_REVISION: 'deployment.kubernetes.io/revision', + ALL_TYPES: `${PREEVY_PREFIX}/all-types`, } export const markObjectAsDeleted = ( @@ -44,6 +48,27 @@ export const markObjectAsDeleted = ( }, }) +export type StoredType = Pick + +export const readAllTypesAnnotation = ( + o: k8s.KubernetesObject, +) => { + const an = o?.metadata?.annotations?.[ANNOTATIONS.ALL_TYPES] + return an ? tryParseJson(an) as StoredType[] : undefined +} + +export const addAllTypesAnnotation = ( + o: k8s.KubernetesObject, + types: StoredType[] +): k8s.KubernetesObject => { + o.metadata ??= {} + o.metadata.annotations ??= {} + o.metadata.annotations[ANNOTATIONS.ALL_TYPES] = JSON.stringify( + types.map(t => pick(t, 'apiVersion', 'kind')) + ) + return o +} + export const addEnvMetadata = ( { profileId, envId, createdAt, instance, package: { name, version }, templateHash }: { profileId: string @@ -96,6 +121,7 @@ export const extractInstance = (o: HasMetadata) => extractLabel(o, 'INSTANCE') export const extractEnvId = (o: HasMetadata) => extractAnnotation(o, 'ENV_ID') export const extractName = (o: HasMetadata) => extractDefined(extractDefined(o, 'metadata'), 'name') export const extractNamespace = (o: HasMetadata) => extractDefined(extractDefined(o, 'metadata'), 'namespace') +export const extractNameAndNamespace = (o: HasMetadata) => ensureDefined(extractDefined(o, 'metadata'), 'namespace', 'name') export const extractTemplateHash = (o: HasMetadata) => extractAnnotation(o, 'TEMPLATE_HASH') export const extractCreatedAt = (o: HasMetadata) => extractAnnotation(o, 'CREATED_AT') @@ -126,7 +152,7 @@ export const profileSelector = ({ profileId }: { profileId: string }) => ({ labelSelector: eqSelector(LABELS.PROFILE_ID, sanitizeLabel(profileId)), }) -export const isDockerHostDeployment = (s: k8s.KubernetesObject) => s.kind === 'Deployment' +export const isDockerHostStatefulSet = (s: k8s.KubernetesObject) => s.kind === 'StatefulSet' && s.metadata?.labels?.[LABELS.COMPONENT] === DOCKER_HOST_VALUE // https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names @@ -136,7 +162,7 @@ const sanitizeName = (s: string) => s .replace(/^[^a-z]/, firstChar => `a${firstChar}`) // prefix with alphabetic if first char is not alphabetic .replace(/[^a-z0-9]$/, lastChar => `${lastChar}z`) // suffix with alphanumeric if last char is not alphanumeric -const RANDOM_ID_SPARE_LENGTH = 10 +const RANDOM_ID_SPARE_LENGTH = 15 // give room for StatefulSet pod name suffix const MAX_NAME_LENGTH = 63 export const envRandomName = ( diff --git a/packages/driver-kube-pod/src/driver/common.ts b/packages/driver-kube-pod/src/driver/common.ts index df0d378f..131c446c 100644 --- a/packages/driver-kube-pod/src/driver/common.ts +++ b/packages/driver-kube-pod/src/driver/common.ts @@ -2,16 +2,21 @@ import * as k8s from '@kubernetes/client-node' import { MachineBase, machineResourceType } from '@preevy/core' import { extractEnvId, extractInstance, extractName, extractNamespace } from './client/index.js' -export type DeploymentMachine = MachineBase & { - deployment: k8s.V1Deployment +export type KubernetesMachine = MachineBase & { + kubernetesObject: T } +export type StatefulSetMachine = KubernetesMachine +export type DeploymentMachine = KubernetesMachine + export type ResourceType = typeof machineResourceType -export const machineFromDeployment = (deployment: k8s.V1Deployment): DeploymentMachine & { envId: string } => ({ - type: machineResourceType, - providerId: extractInstance(deployment), - locationDescription: `deployment/${extractName(deployment)} of namespace ${extractNamespace(deployment)}`, - envId: extractEnvId(deployment), - deployment, -}) +export const k8sObjectToMachine = ( + kubernetesObject: T, +): KubernetesMachine => ({ + type: machineResourceType, + providerId: extractInstance(kubernetesObject), + locationDescription: `${kubernetesObject.kind}/${extractName(kubernetesObject)} of namespace ${extractNamespace(kubernetesObject)}`, + envId: extractEnvId(kubernetesObject), + kubernetesObject, + }) diff --git a/packages/driver-kube-pod/src/driver/creation-driver.ts b/packages/driver-kube-pod/src/driver/creation-driver.ts index 6f87af4f..b91fb17f 100644 --- a/packages/driver-kube-pod/src/driver/creation-driver.ts +++ b/packages/driver-kube-pod/src/driver/creation-driver.ts @@ -1,29 +1,48 @@ +import fs from 'fs' +import * as k8s from '@kubernetes/client-node' import { Flags, Interfaces } from '@oclif/core' -import { MachineCreationDriver, MachineCreationDriverFactory, telemetryEmitter } from '@preevy/core' +import { Logger, MachineCreationDriver, MachineCreationDriverFactory, telemetryEmitter } from '@preevy/core' import { pick } from 'lodash-es' -import { DeploymentMachine, machineFromDeployment } from './common.js' -import { DriverContext, clientFromConfiguration, machineConnection, flags as machineDriverFlags } from './driver.js' +import { DeploymentMachine, ResourceType, StatefulSetMachine, k8sObjectToMachine } from './common.js' +import { clientFromConfiguration, listMachines, machineConnection, flags as machineDriverFlags } from './driver.js' +import { Client, CreationClient, kubeCreationClient, loadKubeConfig } from './client/index.js' +import { DEFAULT_TEMPLATE, packageJson } from '../static.js' export const flags = { ...machineDriverFlags, + template: Flags.string({ + description: 'Path to custom resources template file (will use default template if not specified)', + required: false, + }), 'server-side-apply': Flags.boolean({ description: 'Use server side apply to create Kubernetes resources', default: true, required: false, allowNo: true, }), + 'storage-class': Flags.string({ + description: 'Storage class to use for Pod data volume', + required: false, + }), + 'storage-size': Flags.custom({ + description: 'Size of Pod data volume in GiB', + required: false, + default: 5, + parse: async v => Number(v), + })(), } as const export type MachineCreationFlagTypes = Omit, 'json'> -type MachineCreationDriverContext = DriverContext & { - serverSideApply: boolean - metadata: MachineCreationFlagTypes -} - const machineCreationDriver = ( - { client, serverSideApply, log, metadata }: MachineCreationDriverContext, -): MachineCreationDriver => ({ + { client, creationClient, serverSideApply, log, metadata }: { + log: Logger + serverSideApply: boolean + metadata: MachineCreationFlagTypes + client: Client + creationClient: CreationClient + }, +): MachineCreationDriver => ({ metadata, createMachine: async ({ envId }) => { const startTime = new Date().getTime() @@ -33,8 +52,8 @@ const machineCreationDriver = ( fromSnapshot: true, result: (async () => { log.debug('create machine', { envId, serverSideApply }) - const deployment = await client.createEnv(envId, { serverSideApply }) - const machine = machineFromDeployment(deployment) + const statefulSet = await creationClient.createEnv(envId, { serverSideApply }) + const machine = k8sObjectToMachine(statefulSet) telemetryEmitter().capture('kube-pod create machine end', { elapsed_sec: (new Date().getTime() - startTime) / 1000 }) const connection = await machineConnection(client, machine, log) return { machine, connection } @@ -44,33 +63,66 @@ const machineCreationDriver = ( ensureMachineSnapshot: async () => undefined, getMachineAndSpecDiff: async ({ envId }) => { - const deployment = await client.findMostRecentDeployment({ envId, deleted: false }) - if (!deployment) { + const obj = await client.findEnvObject({ envId, deleted: false }) + if (!obj) { return undefined } - const deploymentHash = client.extractTemplateHash(deployment) - const machine = machineFromDeployment(deployment) - const templateHash = await client.calcTemplateHash({ instance: machine.providerId }) + const deployedHash = creationClient.extractTemplateHash(obj) + const machine = k8sObjectToMachine(obj) + const templateHash = await creationClient.calcTemplateHash({ instance: machine.providerId }) return { - ...machineFromDeployment(deployment), - specDiff: deploymentHash !== templateHash - ? [{ name: 'template', old: deploymentHash, new: templateHash }] + ...machine, + specDiff: deployedHash !== templateHash + ? [{ name: 'template', old: deployedHash, new: templateHash }] : [], } }, + listDeletableResources: () => listMachines({ client }), + + deleteResources: async (wait, ...resources) => { + await Promise.all(resources.map(({ type, providerId }) => { + if (type === 'machine') { + return creationClient.deleteEnv(providerId, { wait }) + } + throw new Error(`Unknown resource type: "${type}"`) + })) + }, + }) -export const factory: MachineCreationDriverFactory< - Interfaces.InferredFlags, - DeploymentMachine -> = ({ flags: f, profile: { id: profileId }, log, debug }) => machineCreationDriver({ - metadata: pick(f, Object.keys(machineDriverFlags)) as MachineCreationFlagTypes, // filter out non-driver flags +type FlagTypes = Omit, 'json'> + +const creationClientFromConfiguration = ({ flags: f, profileId, log, kc }: { + flags: FlagTypes + profileId: string + log: Logger + kc: k8s.KubeConfig +}) => kubeCreationClient({ log, - debug, - client: clientFromConfiguration({ log, flags: f, profileId }), - serverSideApply: f['server-side-apply'], + namespace: f.namespace, + kc, + profileId, + package: packageJson, + template: fs.readFileSync(f.template || DEFAULT_TEMPLATE, 'utf-8'), + storageClass: f['storage-class'], + storageSize: f['storage-size'], }) +export const factory: MachineCreationDriverFactory< + Interfaces.InferredFlags, + StatefulSetMachine | DeploymentMachine, + ResourceType +> = ({ flags: f, profile: { id: profileId }, log }) => { + const kc = loadKubeConfig(f) + return machineCreationDriver({ + metadata: pick(f, Object.keys(machineDriverFlags)) as MachineCreationFlagTypes, // filter out non-driver flags + log, + client: clientFromConfiguration({ log, flags: f, profileId, kc }), + serverSideApply: f['server-side-apply'], + creationClient: creationClientFromConfiguration({ log, flags: f, profileId, kc }), + }) +} + export default machineCreationDriver diff --git a/packages/driver-kube-pod/src/driver/driver.ts b/packages/driver-kube-pod/src/driver/driver.ts index bf7af51b..1640b084 100644 --- a/packages/driver-kube-pod/src/driver/driver.ts +++ b/packages/driver-kube-pod/src/driver/driver.ts @@ -1,4 +1,4 @@ -import fs from 'fs' +import * as k8s from '@kubernetes/client-node' import { Flags, Interfaces } from '@oclif/core' import { MachineDriver, @@ -10,13 +10,12 @@ import { Logger, MachineConnection, } from '@preevy/core' -import { asyncMap } from 'iter-tools-es' +import { asyncConcat, asyncMap } from 'iter-tools-es' import { AddressInfo } from 'net' import { Readable, Writable } from 'stream' import { orderedOutput } from '@preevy/common' -import { DeploymentMachine, ResourceType, machineFromDeployment } from './common.js' -import createClient, { Client, extractName, loadKubeConfig } from './client/index.js' -import { DEFAULT_TEMPLATE, packageJson } from '../static.js' +import { StatefulSetMachine, k8sObjectToMachine, DeploymentMachine } from './common.js' +import { Client, extractName, loadKubeConfig, kubeClient as createClient } from './client/index.js' export type DriverContext = { log: Logger @@ -28,12 +27,12 @@ const isTTY = (s: Readable | Writable) => (s as unknown as { isTTY: boolean }).i export const machineConnection = async ( client: Client, - machine: DeploymentMachine, + machine: StatefulSetMachine, log: Logger, ): Promise => { - const { deployment } = machine as DeploymentMachine - log.debug(`Connecting to deployment "${deployment.metadata?.namespace}/${deployment.metadata?.name}"`) - const pod = await client.findReadyPodForDeployment(deployment) + const { kubernetesObject: statefulSet } = machine as StatefulSetMachine + log.debug(`Connecting to statefulset "${statefulSet.metadata?.namespace}/${statefulSet.metadata?.name}"`) + const pod = await client.findReadyPod(statefulSet) log.debug(`Found pod "${pod.metadata?.name}"`) return ({ @@ -59,7 +58,7 @@ export const machineConnection = async ( const { localSocket, [Symbol.asyncDispose]: dispose, - } = await client.portForward(deployment, 2375, { host, port: 0 }) + } = await client.portForward(statefulSet, 2375, { host, port: 0 }) return { address: { host, port: (localSocket as AddressInfo).port }, @@ -69,79 +68,74 @@ export const machineConnection = async ( }) } +export const listMachines = ( + { client }: { client: Client }, +): AsyncIterableIterator => asyncMap( + k8sObjectToMachine, + asyncConcat( + client.listProfileStatefulSets(), + client.listProfileDeployments(), + ), +) + const machineDriver = ( { client, log }: DriverContext, -): MachineDriver => { - const listMachines = () => asyncMap(machineFromDeployment, client.listProfileDeployments()) - - return ({ - friendlyName: 'Kubernetes single Pod', - - getMachine: async ({ envId }) => { - const deployment = await client.findMostRecentDeployment({ envId, deleted: false }) - return deployment && machineFromDeployment(deployment) - }, - - listMachines, - listDeletableResources: listMachines, - - deleteResources: async (wait, ...resources) => { - await Promise.all(resources.map(({ type, providerId }) => { - if (type === 'machine') { - return client.deleteEnv(providerId, { wait }) - } - throw new Error(`Unknown resource type: "${type}"`) - })) - }, - - resourcePlurals: {}, - - spawnRemoteCommand: async (machine, command, stdio) => { - const pod = await client.findReadyPodForDeployment((machine as DeploymentMachine).deployment) - const { stdin, stdout, stderr } = expandStdioOptions(stdio) - const opts = { - pod: extractName(pod), - container: pod.spec?.containers[0]?.name as string, - command: command.length > 0 ? command : ['sh'], - tty: [stdin, stdout, stderr].every(isTTY), - stdin, - stdout, - stderr, - } - return await client.exec(opts) - }, - - connect: machine => machineConnection(client, machine as DeploymentMachine, log), - - machineStatusCommand: async machine => { - const pod = await client.findReadyPodForDeployment((machine as DeploymentMachine).deployment) - const apiServiceAddress = await client.apiServiceClusterAddress() - if (!apiServiceAddress) { - log.warn('API service not found for cluster') - return undefined - } - const [apiServiceHost, apiServicePort] = apiServiceAddress - - return ({ - contentType: 'application/vnd.kubectl-top-pod-containers', - recipe: { - type: 'docker', - command: ['top', 'pod', '--containers', '--no-headers', extractName(pod)], - image: 'rancher/kubectl:v1.26.7', - network: 'host', - tty: false, - env: { - KUBERNETES_SERVICE_HOST: apiServiceHost, - KUBERNETES_SERVICE_PORT: apiServicePort.toString(), - }, - bindMounts: [ - '/var/run/secrets/kubernetes.io/serviceaccount:/var/run/secrets/kubernetes.io/serviceaccount', - ], +): MachineDriver => ({ + friendlyName: 'Kubernetes single Pod', + + getMachine: async ({ envId }) => { + const obj = await client.findEnvObject({ envId, deleted: false }) + return obj && k8sObjectToMachine(obj) + }, + + listMachines: () => listMachines({ client }), + resourcePlurals: {}, + + spawnRemoteCommand: async (machine, command, stdio) => { + const pod = await client.findReadyPod((machine as StatefulSetMachine | DeploymentMachine).kubernetesObject) + const { stdin, stdout, stderr } = expandStdioOptions(stdio) + const opts = { + pod: extractName(pod), + container: pod.spec?.containers[0]?.name as string, + command: command.length > 0 ? command : ['sh'], + tty: [stdin, stdout, stderr].every(isTTY), + stdin, + stdout, + stderr, + } + return await client.exec(opts) + }, + + connect: machine => machineConnection(client, machine as StatefulSetMachine, log), + + machineStatusCommand: async machine => { + const pod = await client.findReadyPod((machine as StatefulSetMachine | DeploymentMachine).kubernetesObject) + const apiServiceAddress = await client.apiServiceClusterAddress() + if (!apiServiceAddress) { + log.warn('API service not found for cluster') + return undefined + } + const [apiServiceHost, apiServicePort] = apiServiceAddress + + return ({ + contentType: 'application/vnd.kubectl-top-pod-containers', + recipe: { + type: 'docker', + command: ['top', 'pod', '--containers', '--no-headers', extractName(pod)], + image: 'rancher/kubectl:v1.26.7', + network: 'host', + tty: false, + env: { + KUBERNETES_SERVICE_HOST: apiServiceHost, + KUBERNETES_SERVICE_PORT: apiServicePort.toString(), }, - }) - }, - }) -} + bindMounts: [ + '/var/run/secrets/kubernetes.io/serviceaccount:/var/run/secrets/kubernetes.io/serviceaccount', + ], + }, + }) + }, +}) export const flags = { namespace: Flags.string({ @@ -159,34 +153,28 @@ export const flags = { required: false, env: 'KUBE_CONTEXT', }), - template: Flags.string({ - description: 'Path to custom resources template file (will use default template if not specified)', - required: false, - }), } as const type FlagTypes = Omit, 'json'> -export const clientFromConfiguration = ({ flags: f, profileId, log }: { - flags: Pick +export const clientFromConfiguration = ({ flags: f, profileId, log, kc }: { + flags: Pick profileId: string log: Logger + kc: k8s.KubeConfig }) => createClient({ log, namespace: f.namespace, - kc: loadKubeConfig(f.kubeconfig, f.context), + kc, kubeconfig: f.kubeconfig, profileId, - package: packageJson, - template: fs.readFileSync(f.template || DEFAULT_TEMPLATE, 'utf-8'), }) export const factory: MachineDriverFactory< FlagTypes, - DeploymentMachine, - ResourceType + StatefulSetMachine | DeploymentMachine > = ({ flags: f, profile: { id: profileId }, log, debug }) => machineDriver({ log, debug, - client: clientFromConfiguration({ log, flags: f, profileId }), + client: clientFromConfiguration({ log, flags: f, profileId, kc: loadKubeConfig(f) }), }) diff --git a/packages/driver-kube-pod/src/driver/index.ts b/packages/driver-kube-pod/src/driver/index.ts index 756f915a..f17cace5 100644 --- a/packages/driver-kube-pod/src/driver/index.ts +++ b/packages/driver-kube-pod/src/driver/index.ts @@ -2,7 +2,7 @@ import { flags, factory } from './driver.js' import { flags as machineCreationFlags, factory as machineCreationFactory } from './creation-driver.js' import { inquireFlags } from './questions.js' -export type { DeploymentMachine, ResourceType } from './common.js' +export type { StatefulSetMachine, DeploymentMachine, ResourceType } from './common.js' export type { MachineCreationFlagTypes } from './creation-driver.js' export default { diff --git a/packages/driver-kube-pod/src/driver/questions.ts b/packages/driver-kube-pod/src/driver/questions.ts index 3743fd0a..7a79892b 100644 --- a/packages/driver-kube-pod/src/driver/questions.ts +++ b/packages/driver-kube-pod/src/driver/questions.ts @@ -1,14 +1,38 @@ import * as inquirer from '@inquirer/prompts' +import * as k8s from '@kubernetes/client-node' +import { Logger, withSpinner } from '@preevy/core' +import { asyncToArray } from 'iter-tools-es' import { MachineCreationFlagTypes, flags } from './creation-driver.js' -import { loadKubeConfig } from './client/index.js' +import { extractName, loadKubeConfig } from './client/index.js' +import { storageV1ApiHelpers as createStorageV1ApiHelpers } from './client/k8s-helpers.js' +import { logError } from './client/log-error.js' -export const inquireFlags = async (): Promise> => { +export const inquireStorageClass = async (kc: k8s.KubeConfig, { log }: { log: Logger }) => { + const wrap = logError(log) + const storageHelpers = createStorageV1ApiHelpers(kc.makeApiClient(k8s.StorageV1Api), { wrap }) + const availableStorageClasses = await withSpinner( + () => asyncToArray(storageHelpers.listStorageClasses({ })), + { text: 'Loading storage classes...' }, + ) + + if (!availableStorageClasses.length) { + return undefined + } + const storageClassNames = availableStorageClasses.map(extractName) + return await inquirer.select({ + message: flags['storage-class'].description as string, + choices: [{ name: '(default)', value: undefined }, new inquirer.Separator(), ...storageClassNames.map(c => ({ value: c }))], + default: undefined, + }) +} + +export const inquireFlags = async ({ log }: { log: Logger }): Promise> => { const namespace = await inquirer.input({ default: flags.namespace.default as string, message: flags.namespace.description as string, }) - const kc = loadKubeConfig() // will read from KUBECONFIG env var as well + const kc = loadKubeConfig({}) // will read from KUBECONFIG env var as well const contextChoices = [ { name: 'Default: use default context at runtime', value: undefined }, new inquirer.Separator(), @@ -20,8 +44,18 @@ export const inquireFlags = async (): Promise> message: flags.context.description as string, }) + const storageClass = await inquireStorageClass(kc, { log }) + + const storageSize = Number(await inquirer.input({ + message: flags['storage-size'].description as string, + default: String(flags['storage-size'].default), + validate: value => (Number(value) > 0 ? true : 'Please enter a positive number'), + })) + return { ...(namespace && namespace !== flags.namespace.default) ? { namespace } : undefined, ...(context && context !== flags.context.default) ? { context } : undefined, + ...(storageClass && storageClass !== flags['storage-class'].default) ? { 'storage-class': storageClass } : undefined, + ...(storageSize && storageSize !== flags['storage-size'].default) ? { 'storage-size': storageSize } : undefined, } } diff --git a/packages/driver-kube-pod/static/default-template.yaml.njk b/packages/driver-kube-pod/static/default-template.yaml.njk index d074e812..361f1b00 100644 --- a/packages/driver-kube-pod/static/default-template.yaml.njk +++ b/packages/driver-kube-pod/static/default-template.yaml.njk @@ -14,26 +14,30 @@ metadata: data: daemon.json: | { - "tls": false + "tls": false, + "data-root": "/data/docker" } --- apiVersion: apps/v1 -kind: Deployment +kind: StatefulSet metadata: name: {{ id }} namespace: {{ namespace }} labels: - app: preevy-{{ id }} app.kubernetes.io/component: docker-host spec: replicas: 1 selector: matchLabels: - app: preevy-{{ id }} + {% for k, v in labels %} + {{ k }}: {{ v }} + {% endfor %} template: metadata: labels: - app: preevy-{{ id }} + {% for k, v in labels %} + {{ k }}: {{ v }} + {% endfor %} spec: serviceAccountName: {{ id }}-sa containers: @@ -43,15 +47,29 @@ spec: privileged: true command: ["dockerd", "--host=tcp://0.0.0.0:2375", "--host=unix:///var/run/docker.sock"] volumeMounts: - - mountPath: /etc/docker - name: docker-config - - + - name: docker-config + mountPath: /etc/docker + - name: data + mountPath: /data volumes: - name: docker-config configMap: name: {{ id }}-dc - + volumeClaimTemplates: + - metadata: + name: data + labels: + {% for k, v in labels %} + {{ k }}: {{ v }} + {% endfor %} + spec: + accessModes: ["ReadWriteOnce"] +{% if storageClass %} + storageClassName: "{{ storageClass }}" +{% endif %} + resources: + requests: + storage: {{ storageSize }}Gi --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role diff --git a/packages/driver-lightsail/package.json b/packages/driver-lightsail/package.json index a140a354..4dc0754a 100644 --- a/packages/driver-lightsail/package.json +++ b/packages/driver-lightsail/package.json @@ -1,6 +1,6 @@ { "name": "@preevy/driver-lightsail", - "version": "0.0.59", + "version": "0.0.60", "description": "AWS Lightsail driver for Preevy", "exports": { ".": "./dist/index.js" @@ -18,7 +18,7 @@ "@aws-sdk/client-sts": "^3.289.0", "@aws-sdk/util-waiter": "^3.271.0", "@oclif/core": "^3.15.1", - "@preevy/core": "0.0.59", + "@preevy/core": "0.0.60", "inquirer-autocomplete-standalone": "^0.8.1", "iter-tools-es": "^7.5.3", "lodash-es": "^4.17.21" diff --git a/packages/driver-lightsail/src/driver/index.ts b/packages/driver-lightsail/src/driver/index.ts index c888814e..79277a5c 100644 --- a/packages/driver-lightsail/src/driver/index.ts +++ b/packages/driver-lightsail/src/driver/index.ts @@ -42,15 +42,15 @@ type DriverContext = { store: Store } +const listMachines = ({ client }: { client: Client }) => asyncMap(machineFromInstance, client.listInstances()) + const machineDriver = ({ client, region, store, -}: DriverContext): MachineDriver => { +}: DriverContext): MachineDriver => { const keyAlias = region - const listMachines = () => asyncMap(machineFromInstance, client.listInstances()) - return { friendlyName: 'AWS Lightsail', customizationScripts: CUSTOMIZE_BARE_MACHINE, @@ -60,39 +60,7 @@ const machineDriver = ({ return instance && machineFromInstance(instance) }, - listMachines, - listDeletableResources: () => { - const machines = listMachines() - - const snapshots = asyncMap( - ({ name }) => ({ type: 'snapshot' as ResourceType, providerId: name as string }), - client.listInstanceSnapshots(), - ) - const keyPairs = asyncMap( - ({ name }) => ({ type: 'keypair' as ResourceType, providerId: name as string }), - client.listKeyPairsByAlias(keyAlias), - ) - - return asyncConcat(machines, snapshots, keyPairs) - }, - - deleteResources: async (wait, ...resources) => { - await Promise.all(resources.map(({ type, providerId }) => { - if (type === 'snapshot') { - return client.deleteInstanceSnapshot({ instanceSnapshotName: providerId, wait }) - } - if (type === 'keypair') { - return Promise.all([ - client.deleteKeyPair(providerId, wait), - sshKeysStore(store).deleteKey(keyAlias), - ]) - } - if (type === 'machine') { - return client.deleteInstance(providerId, wait) - } - throw new Error(`Unknown resource type "${type}"`) - })) - }, + listMachines: () => listMachines({ client }), resourcePlurals: { snapshot: 'snapshots', @@ -119,7 +87,7 @@ const contextFromFlags = ({ region }: FlagTypes): { region: string } => ({ region: region as string, }) -const inquireFlags = async () => { +const inquireFlags = async ({ log: _log }: { log: Logger }) => { const region = await inquirerAutoComplete({ default: process.env.AWS_REGION ?? 'us-east-1', message: flags.region.description as string, @@ -130,7 +98,7 @@ const inquireFlags = async () => { return { region } } -const factory: MachineDriverFactory = ({ +const factory: MachineDriverFactory = ({ flags: f, profile: { id: profileId }, store, @@ -173,7 +141,7 @@ type MachineCreationContext = DriverContext & { const machineCreationDriver = ( { region, client, availabilityZone, bundleId: specifiedBundleId, store, log, debug, metadata }: MachineCreationContext -): MachineCreationDriver => { +): MachineCreationDriver => { const bundleId = specifiedBundleId ?? DEFAULT_BUNDLE_ID const keyAlias = region @@ -252,6 +220,39 @@ const machineCreationDriver = ( }) return undefined }, + + listDeletableResources: () => { + const machines = listMachines({ client }) + + const snapshots = asyncMap( + ({ name }) => ({ type: 'snapshot' as ResourceType, providerId: name as string }), + client.listInstanceSnapshots(), + ) + const keyPairs = asyncMap( + ({ name }) => ({ type: 'keypair' as ResourceType, providerId: name as string }), + client.listKeyPairsByAlias(keyAlias), + ) + + return asyncConcat(machines, snapshots, keyPairs) + }, + + deleteResources: async (wait, ...resources) => { + await Promise.all(resources.map(({ type, providerId }) => { + if (type === 'snapshot') { + return client.deleteInstanceSnapshot({ instanceSnapshotName: providerId, wait }) + } + if (type === 'keypair') { + return Promise.all([ + client.deleteKeyPair(providerId, wait), + sshKeysStore(store).deleteKey(keyAlias), + ]) + } + if (type === 'machine') { + return client.deleteInstance(providerId, wait) + } + throw new Error(`Unknown resource type "${type}"`) + })) + }, }) } diff --git a/packages/plugin-github/package.json b/packages/plugin-github/package.json index 42c86bb1..df4a282d 100644 --- a/packages/plugin-github/package.json +++ b/packages/plugin-github/package.json @@ -1,6 +1,6 @@ { "name": "@preevy/plugin-github", - "version": "0.0.59", + "version": "0.0.60", "description": "Preevy plugin for GitHub", "exports": { ".": "./dist/index.js" @@ -12,8 +12,8 @@ "license": "Apache-2.0", "dependencies": { "@oclif/core": "^3.15.1", - "@preevy/cli-common": "0.0.59", - "@preevy/core": "0.0.59", + "@preevy/cli-common": "0.0.60", + "@preevy/core": "0.0.60", "lodash-es": "^4.17.21", "nunjucks": "^3.2.4", "octokit": "^3.1.1" diff --git a/patches/pkg+5.8.1.patch b/patches/pkg+5.8.1.patch deleted file mode 100644 index a54412e5..00000000 --- a/patches/pkg+5.8.1.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff --git a/node_modules/pkg/prelude/bootstrap.js b/node_modules/pkg/prelude/bootstrap.js -index 034bd15..5913878 100644 ---- a/node_modules/pkg/prelude/bootstrap.js -+++ b/node_modules/pkg/prelude/bootstrap.js -@@ -700,7 +700,14 @@ function payloadFileSync(pointer) { - fs.rmdirSync(folder, { recursive: true }); - } - } else { -- fs.rmSync(folder, { recursive: true }); -+ try { -+ fs.rmSync(folder, { recursive: true, }); -+ } catch (e){ -+ if (e.code !== "ENOENT"){ -+ throw e -+ } -+ } -+ - } - } - const temporaryFiles = {}; diff --git a/site/docs/ci/index.mdx b/site/docs/ci/index.mdx index e7709507..1203f04c 100644 --- a/site/docs/ci/index.mdx +++ b/site/docs/ci/index.mdx @@ -108,7 +108,7 @@ jobs: - uses: actions/checkout@v3 - - uses: livecycle/preevy-up-action@v2.0.0 + - uses: livecycle/preevy-up-action@v2.4.0 id: preevy with: profile-url: "${{ vars.PREEVY_PROFILE_URL }}" @@ -146,7 +146,7 @@ jobs: aws-region: eu-west-1 - uses: actions/checkout@v3 - - uses: livecycle/preevy-down-action@v1.1.0 + - uses: livecycle/preevy-down-action@v1.4.0 id: preevy with: profile-url: "${{ vars.PREEVY_PROFILE_URL }}" diff --git a/site/docs/deploy-runtimes/kube-pod.md b/site/docs/deploy-runtimes/kube-pod.md index c4e852de..de484545 100644 --- a/site/docs/deploy-runtimes/kube-pod.md +++ b/site/docs/deploy-runtimes/kube-pod.md @@ -30,6 +30,7 @@ Your services are still exposed using the Preevy Tunnel Service - there's no nee - When using [RBAC authorization](https://kubernetes.io/docs/reference/access-authn-authz/rbac/), the default context needs permissions for running [exec](https://kubernetes.io/docs/tasks/debug/debug-application/get-shell-running-container/) and [port-forward](https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/) for specific pods in the configured namespace. - The [`kubectl`](https://kubernetes.io/docs/tasks/tools/#kubectl) tool needs to be installed and available in the PATH. - By default, the driver runs a Pod with [`privileged: true` security context](https://kubernetes.io/docs/concepts/security/pod-security-standards/#privileged). In some cases, this requirement may be lifted by customizing the deployment template, see [below](#configuring-rootless-unprivileged-docker-in-docker). +- A StorageClass must be defined in the cluster to enable [dynamic volume provisioning](https://kubernetes.io/docs/concepts/storage/dynamic-provisioning/#enabling-dynamic-provisioning). This is usually pre-defined in your Kubernetes cluster. ## Supported options @@ -39,6 +40,8 @@ Your services are still exposed using the Preevy Tunnel Service - there's no nee |`kubeconfig`|`--kube-pod-kubeconfig`|`$HOME/.kube`| `KUBECONFIG` | path to a [`kubeconfig`](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) file| |`pod-template`|`--kube-pod-template`|[default template](https://github.com/livecycle/preevy/blob/main/packages/driver-kube-pod/static/default-template.yaml.njk)| |path to a [nunjacks template](https://mozilla.github.io/nunjucks/templating.html) used to provision Kubernetes resources per environment. See [below](#customizing-the-provisioned-kubernetes-resources) for details| |`server-side-apply`|`--[no-]kube-pod-server-side-apply`| true | | if true, provision resources using [server-side apply](https://kubernetes.io/docs/reference/using-api/server-side-apply/), else using client-side apply (CREATE/PATCH). Applies to `preevy up` only| +|`storage-class`|`--kube-pod-storage-class`| (undefined) | | The Kubernetes [StorageClass](https://kubernetes.io/docs/concepts/storage/storage-classes/) used in the StatefulSet template to provision the data volume for the Docker server in the Preevy environment Pod | +|`storage-size`|`--kube-pod-storage-size`| `5` | | Size in GiB of the volume allocated for the Docker server in the Preevy environment Pod. Adjust this acccording to the storage requirements of your environment. | ### Overriding options @@ -54,12 +57,13 @@ x-preevy: drivers: kube-pod: namespace: other-namespace + storage-size: 12.5 ``` Options can also be overridden using a CLI flag per command execution: ```bash -preevy up --kube-pod-namespace=other-namespace +preevy up --kube-pod-namespace=other-namespace --kube-pod-storage-size=12.5 ``` ## Customizing the provisioned Kubernetes resources @@ -80,11 +84,11 @@ Start by copying the [default template](https://github.com/livecycle/preevy/blob All resources need to be deployed in a single namespace, specified as a template argument (see below). -While multiple [Kubernetes Deployment](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/deployment-v1/#Deployment) objects may be defined, exactly one Deployment must have the label `app.kubernetes.io/component: docker-host`: -- The [status](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#deployment-status) of the Deployment is used to determine whether the Preevy environment is ready. -- The first [container](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#containers) of the Deployment spec is used for copying files, so it [must have](https://kubernetes.io/docs/reference/kubectl/cheatsheet/#copying-files-and-directories-to-and-from-containers) the `tar` and `find` commands available. +While multiple [Kubernetes StatefulSet](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/stateful-set-v1/) objects may be defined, exactly one StatefulSet must have the label `app.kubernetes.io/component: docker-host`: +- The [status](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/stateful-set-v1/#StatefulSetStatus) of the StatefulSet is used to determine whether the Preevy environment is ready. +- The first [container](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#containers) of the StatefulSet spec is used for copying files, so it [must have](https://kubernetes.io/docs/reference/kubectl/cheatsheet/#copying-files-and-directories-to-and-from-containers) the `tar` and `find` commands available. -A Docker server must be listening on port 2375 of the Deployment's Pod. As Preevy uses the [port-forward API](https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/) to connect to the Docker server, it does not need to be exposed as a service. For the same reason, TLS is not supported and needs to be disabled for this port. +A Docker server must be listening on port 2375 of the StatefulSet's Pod. As Preevy uses the [port-forward API](https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/) to connect to the Docker server, it does not need to be exposed as a service. For the same reason, TLS is not supported and needs to be disabled for this port. The Docker server must also be listening on the unix socket path `/var/run/docker.sock` - this is used by the Preevy agent service running alongside your services. @@ -96,9 +100,11 @@ The following arguments are specified when rendering the template: - `namespace`: the Kubernetes namespace saved in the Preevy profile or specified in the `--kube-pod-namespace` flag. All resources must be defined in this namespace. - `id`: A generated ID for this environment, 53 characters or less, comprised of the Preevy environment ID and a random suffix. `id` can be used as part of a label value, with up to 10 additional characters so as to not exceed the [63-character limit for labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#syntax-and-character-set) +- `storageClass`: The [Kubernetes StorageClass](https://kubernetes.io/docs/concepts/storage/storage-classes/) used to [dynamically provision](https://kubernetes.io/docs/concepts/storage/dynamic-provisioning/) a volume for the StatefulSet. Saved in the Preevy profile or specified in the `--kube-pod-storage-class` flag. Leaving this undefined will cause the default storage class to be used. +- `storageSize`: The size of the allocated volume in GiB. Saved in the Preevy profile or specified in the `--kube-pod-storage-size` flag. ## Configuring rootless unprivileged Docker-in-Docker -By default, the Kubernetes Docker-in-Docker driver creates a Deployment which runs the [`docker:dind` image](https://hub.docker.com/_/docker). Traditionally, running Docker inside a container requires the [`privileged: true` security context](https://kubernetes.io/docs/concepts/security/pod-security-standards/#privileged), which may be a security concern. +By default, the Kubernetes Docker-in-Docker driver creates a [StatefulSet](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/stateful-set-v1/) which runs the [`docker:dind` image](https://hub.docker.com/_/docker). Traditionally, running Docker inside a container requires the [`privileged: true` security context](https://kubernetes.io/docs/concepts/security/pod-security-standards/#privileged), which may be a security concern. [Sysbox](https://github.com/nestybox/sysbox) is an OSS project (acquired by Docker) that allows running unprivileged containers in a Kubernetes cluster. It can be [installed](https://github.com/nestybox/sysbox/blob/master/docs/user-guide/install-k8s.md) on most of the popular Kubernetes distros including managed cloud platforms like Amazon EKS, Google GKE, and Azure AKA. Once installed, a custom template can be used to [provision Pods](https://github.com/nestybox/sysbox/blob/master/docs/user-guide/deploy.md#deploying-pods-with-kubernetes--sysbox) without the `privileged` security context. diff --git a/site/yarn.lock b/site/yarn.lock index 4e553f72..1fb61b90 100644 --- a/site/yarn.lock +++ b/site/yarn.lock @@ -4081,9 +4081,9 @@ flux@^4.0.1: fbjs "^3.0.1" follow-redirects@^1.0.0, follow-redirects@^1.14.7: - version "1.15.3" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" - integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + version "1.15.4" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf" + integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw== fork-ts-checker-webpack-plugin@^6.5.0: version "6.5.3" diff --git a/yarn.lock b/yarn.lock index 71d296a0..fbf8ae2f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -100,480 +100,531 @@ "@aws-sdk/types" "3.370.0" tslib "^2.5.0" +"@aws-sdk/client-cloudfront@^3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cloudfront/-/client-cloudfront-3.496.0.tgz#9a496b834f134d692d449f73c8533b5a836cbe17" + integrity sha512-8sIyrJstom//Ow5d5ParGunC2x7DmmyXjQ7psBVyzKN9IEtjJGqMVsbhR0lC5+kmNLLUUPMB6oz6yJCpMNSCnw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.496.0" + "@aws-sdk/core" "3.496.0" + "@aws-sdk/credential-provider-node" "3.496.0" + "@aws-sdk/middleware-host-header" "3.496.0" + "@aws-sdk/middleware-logger" "3.496.0" + "@aws-sdk/middleware-recursion-detection" "3.496.0" + "@aws-sdk/middleware-signing" "3.496.0" + "@aws-sdk/middleware-user-agent" "3.496.0" + "@aws-sdk/region-config-resolver" "3.496.0" + "@aws-sdk/types" "3.496.0" + "@aws-sdk/util-endpoints" "3.496.0" + "@aws-sdk/util-user-agent-browser" "3.496.0" + "@aws-sdk/util-user-agent-node" "3.496.0" + "@aws-sdk/xml-builder" "3.496.0" + "@smithy/config-resolver" "^2.1.1" + "@smithy/core" "^1.3.1" + "@smithy/fetch-http-handler" "^2.4.1" + "@smithy/hash-node" "^2.1.1" + "@smithy/invalid-dependency" "^2.1.1" + "@smithy/middleware-content-length" "^2.1.1" + "@smithy/middleware-endpoint" "^2.4.1" + "@smithy/middleware-retry" "^2.1.1" + "@smithy/middleware-serde" "^2.1.1" + "@smithy/middleware-stack" "^2.1.1" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/node-http-handler" "^2.3.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/url-parser" "^2.1.1" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-body-length-browser" "^2.1.1" + "@smithy/util-body-length-node" "^2.2.1" + "@smithy/util-defaults-mode-browser" "^2.1.1" + "@smithy/util-defaults-mode-node" "^2.1.1" + "@smithy/util-endpoints" "^1.1.1" + "@smithy/util-retry" "^2.1.1" + "@smithy/util-stream" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" + "@smithy/util-waiter" "^2.1.1" + fast-xml-parser "4.2.5" + tslib "^2.5.0" + "@aws-sdk/client-lightsail@^3.271.0": - version "3.484.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-lightsail/-/client-lightsail-3.484.0.tgz#e3437e21d0d7af598fb84680be7ffe210843211f" - integrity sha512-+KSMiriaGI67qEEcK2AhRxfNVoL8ROd3q0Ej4c9r5aPJK+HeESQRwyk7aptRda6JGuwGVjR/jiKT5Oj1RzvGAg== + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-lightsail/-/client-lightsail-3.496.0.tgz#055663d52e6baff2299c618f175f47e629b7281b" + integrity sha512-ZCxBl/EzHY1+Oz+Wlnrf+wSaSTQ8+nvUnpBs3es9pf7g4A0YKL+34lVOPvMomK/uDzDwbubs7GBJM58HQYrNRA== dependencies: "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.484.0" - "@aws-sdk/core" "3.481.0" - "@aws-sdk/credential-provider-node" "3.484.0" - "@aws-sdk/middleware-host-header" "3.468.0" - "@aws-sdk/middleware-logger" "3.468.0" - "@aws-sdk/middleware-recursion-detection" "3.468.0" - "@aws-sdk/middleware-signing" "3.468.0" - "@aws-sdk/middleware-user-agent" "3.478.0" - "@aws-sdk/region-config-resolver" "3.484.0" - "@aws-sdk/types" "3.468.0" - "@aws-sdk/util-endpoints" "3.478.0" - "@aws-sdk/util-user-agent-browser" "3.468.0" - "@aws-sdk/util-user-agent-node" "3.470.0" - "@smithy/config-resolver" "^2.0.22" - "@smithy/fetch-http-handler" "^2.3.1" - "@smithy/hash-node" "^2.0.17" - "@smithy/invalid-dependency" "^2.0.15" - "@smithy/middleware-content-length" "^2.0.17" - "@smithy/middleware-endpoint" "^2.2.3" - "@smithy/middleware-retry" "^2.0.25" - "@smithy/middleware-serde" "^2.0.15" - "@smithy/middleware-stack" "^2.0.9" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/node-http-handler" "^2.2.1" - "@smithy/protocol-http" "^3.0.11" - "@smithy/smithy-client" "^2.2.0" - "@smithy/types" "^2.7.0" - "@smithy/url-parser" "^2.0.15" - "@smithy/util-base64" "^2.0.1" - "@smithy/util-body-length-browser" "^2.0.1" - "@smithy/util-body-length-node" "^2.1.0" - "@smithy/util-defaults-mode-browser" "^2.0.23" - "@smithy/util-defaults-mode-node" "^2.0.31" - "@smithy/util-endpoints" "^1.0.7" - "@smithy/util-retry" "^2.0.8" - "@smithy/util-utf8" "^2.0.2" + "@aws-sdk/client-sts" "3.496.0" + "@aws-sdk/core" "3.496.0" + "@aws-sdk/credential-provider-node" "3.496.0" + "@aws-sdk/middleware-host-header" "3.496.0" + "@aws-sdk/middleware-logger" "3.496.0" + "@aws-sdk/middleware-recursion-detection" "3.496.0" + "@aws-sdk/middleware-signing" "3.496.0" + "@aws-sdk/middleware-user-agent" "3.496.0" + "@aws-sdk/region-config-resolver" "3.496.0" + "@aws-sdk/types" "3.496.0" + "@aws-sdk/util-endpoints" "3.496.0" + "@aws-sdk/util-user-agent-browser" "3.496.0" + "@aws-sdk/util-user-agent-node" "3.496.0" + "@smithy/config-resolver" "^2.1.1" + "@smithy/fetch-http-handler" "^2.4.1" + "@smithy/hash-node" "^2.1.1" + "@smithy/invalid-dependency" "^2.1.1" + "@smithy/middleware-content-length" "^2.1.1" + "@smithy/middleware-endpoint" "^2.4.1" + "@smithy/middleware-retry" "^2.1.1" + "@smithy/middleware-serde" "^2.1.1" + "@smithy/middleware-stack" "^2.1.1" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/node-http-handler" "^2.3.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/url-parser" "^2.1.1" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-body-length-browser" "^2.1.1" + "@smithy/util-body-length-node" "^2.2.1" + "@smithy/util-defaults-mode-browser" "^2.1.1" + "@smithy/util-defaults-mode-node" "^2.1.1" + "@smithy/util-endpoints" "^1.1.1" + "@smithy/util-retry" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" tslib "^2.5.0" -"@aws-sdk/client-s3@^3.271.0": - version "3.484.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.484.0.tgz#c4d9777996e0d8a163129b83c976612f0183e98c" - integrity sha512-6+N1TflOHAPMRAbOXVuJgGouWhSVIznKLuf+3ZDHYWuMUd+FLDhQvplxjVG1czRXsYwROEFylirAU1zJOHA6gA== +"@aws-sdk/client-s3@^3.271.0", "@aws-sdk/client-s3@^3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.496.0.tgz#a658feb0843239e3af6b763e2a107430fcd676ce" + integrity sha512-Q16iIP8SmM/7uWHbTCRnvXgM+RxgEDHQmkKL1bvdPLhfu4q1+RwWwJ/WS+1amwQtwvWc8Z51W4XEsokJmqOYUA== dependencies: "@aws-crypto/sha1-browser" "3.0.0" "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.484.0" - "@aws-sdk/core" "3.481.0" - "@aws-sdk/credential-provider-node" "3.484.0" - "@aws-sdk/middleware-bucket-endpoint" "3.484.0" - "@aws-sdk/middleware-expect-continue" "3.468.0" - "@aws-sdk/middleware-flexible-checksums" "3.468.0" - "@aws-sdk/middleware-host-header" "3.468.0" - "@aws-sdk/middleware-location-constraint" "3.468.0" - "@aws-sdk/middleware-logger" "3.468.0" - "@aws-sdk/middleware-recursion-detection" "3.468.0" - "@aws-sdk/middleware-sdk-s3" "3.484.0" - "@aws-sdk/middleware-signing" "3.468.0" - "@aws-sdk/middleware-ssec" "3.468.0" - "@aws-sdk/middleware-user-agent" "3.478.0" - "@aws-sdk/region-config-resolver" "3.484.0" - "@aws-sdk/signature-v4-multi-region" "3.484.0" - "@aws-sdk/types" "3.468.0" - "@aws-sdk/util-endpoints" "3.478.0" - "@aws-sdk/util-user-agent-browser" "3.468.0" - "@aws-sdk/util-user-agent-node" "3.470.0" - "@aws-sdk/xml-builder" "3.472.0" - "@smithy/config-resolver" "^2.0.22" - "@smithy/core" "^1.2.1" - "@smithy/eventstream-serde-browser" "^2.0.15" - "@smithy/eventstream-serde-config-resolver" "^2.0.15" - "@smithy/eventstream-serde-node" "^2.0.15" - "@smithy/fetch-http-handler" "^2.3.1" - "@smithy/hash-blob-browser" "^2.0.16" - "@smithy/hash-node" "^2.0.17" - "@smithy/hash-stream-node" "^2.0.17" - "@smithy/invalid-dependency" "^2.0.15" - "@smithy/md5-js" "^2.0.17" - "@smithy/middleware-content-length" "^2.0.17" - "@smithy/middleware-endpoint" "^2.2.3" - "@smithy/middleware-retry" "^2.0.25" - "@smithy/middleware-serde" "^2.0.15" - "@smithy/middleware-stack" "^2.0.9" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/node-http-handler" "^2.2.1" - "@smithy/protocol-http" "^3.0.11" - "@smithy/smithy-client" "^2.2.0" - "@smithy/types" "^2.7.0" - "@smithy/url-parser" "^2.0.15" - "@smithy/util-base64" "^2.0.1" - "@smithy/util-body-length-browser" "^2.0.1" - "@smithy/util-body-length-node" "^2.1.0" - "@smithy/util-defaults-mode-browser" "^2.0.23" - "@smithy/util-defaults-mode-node" "^2.0.31" - "@smithy/util-endpoints" "^1.0.7" - "@smithy/util-retry" "^2.0.8" - "@smithy/util-stream" "^2.0.23" - "@smithy/util-utf8" "^2.0.2" - "@smithy/util-waiter" "^2.0.15" + "@aws-sdk/client-sts" "3.496.0" + "@aws-sdk/core" "3.496.0" + "@aws-sdk/credential-provider-node" "3.496.0" + "@aws-sdk/middleware-bucket-endpoint" "3.496.0" + "@aws-sdk/middleware-expect-continue" "3.496.0" + "@aws-sdk/middleware-flexible-checksums" "3.496.0" + "@aws-sdk/middleware-host-header" "3.496.0" + "@aws-sdk/middleware-location-constraint" "3.496.0" + "@aws-sdk/middleware-logger" "3.496.0" + "@aws-sdk/middleware-recursion-detection" "3.496.0" + "@aws-sdk/middleware-sdk-s3" "3.496.0" + "@aws-sdk/middleware-signing" "3.496.0" + "@aws-sdk/middleware-ssec" "3.496.0" + "@aws-sdk/middleware-user-agent" "3.496.0" + "@aws-sdk/region-config-resolver" "3.496.0" + "@aws-sdk/signature-v4-multi-region" "3.496.0" + "@aws-sdk/types" "3.496.0" + "@aws-sdk/util-endpoints" "3.496.0" + "@aws-sdk/util-user-agent-browser" "3.496.0" + "@aws-sdk/util-user-agent-node" "3.496.0" + "@aws-sdk/xml-builder" "3.496.0" + "@smithy/config-resolver" "^2.1.1" + "@smithy/core" "^1.3.1" + "@smithy/eventstream-serde-browser" "^2.1.1" + "@smithy/eventstream-serde-config-resolver" "^2.1.1" + "@smithy/eventstream-serde-node" "^2.1.1" + "@smithy/fetch-http-handler" "^2.4.1" + "@smithy/hash-blob-browser" "^2.1.1" + "@smithy/hash-node" "^2.1.1" + "@smithy/hash-stream-node" "^2.1.1" + "@smithy/invalid-dependency" "^2.1.1" + "@smithy/md5-js" "^2.1.1" + "@smithy/middleware-content-length" "^2.1.1" + "@smithy/middleware-endpoint" "^2.4.1" + "@smithy/middleware-retry" "^2.1.1" + "@smithy/middleware-serde" "^2.1.1" + "@smithy/middleware-stack" "^2.1.1" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/node-http-handler" "^2.3.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/url-parser" "^2.1.1" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-body-length-browser" "^2.1.1" + "@smithy/util-body-length-node" "^2.2.1" + "@smithy/util-defaults-mode-browser" "^2.1.1" + "@smithy/util-defaults-mode-node" "^2.1.1" + "@smithy/util-endpoints" "^1.1.1" + "@smithy/util-retry" "^2.1.1" + "@smithy/util-stream" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" + "@smithy/util-waiter" "^2.1.1" fast-xml-parser "4.2.5" tslib "^2.5.0" -"@aws-sdk/client-sso@3.484.0": - version "3.484.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.484.0.tgz#3fffe4229c0883286c08f60f1fc5d83f1a989e7d" - integrity sha512-eHKXDHqgPt99977hNissa1y/efwXZ9kg3EKPLK13b6VzTC8s0+Ih+YZemNE22ahw6SYnRiGglYdkdypJ/uPHkg== +"@aws-sdk/client-sso@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.496.0.tgz#765cbfb3afcbe7bc8f2430e40afd4d542a0d58fb" + integrity sha512-fuaMuxKg7CMUsP9l3kxYWCOxFsBjdA0xj5nlikaDm1661/gB4KkAiGqRY8LsQkpNXvXU8Nj+f7oCFADFyGYzyw== dependencies: "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.481.0" - "@aws-sdk/middleware-host-header" "3.468.0" - "@aws-sdk/middleware-logger" "3.468.0" - "@aws-sdk/middleware-recursion-detection" "3.468.0" - "@aws-sdk/middleware-user-agent" "3.478.0" - "@aws-sdk/region-config-resolver" "3.484.0" - "@aws-sdk/types" "3.468.0" - "@aws-sdk/util-endpoints" "3.478.0" - "@aws-sdk/util-user-agent-browser" "3.468.0" - "@aws-sdk/util-user-agent-node" "3.470.0" - "@smithy/config-resolver" "^2.0.22" - "@smithy/core" "^1.2.1" - "@smithy/fetch-http-handler" "^2.3.1" - "@smithy/hash-node" "^2.0.17" - "@smithy/invalid-dependency" "^2.0.15" - "@smithy/middleware-content-length" "^2.0.17" - "@smithy/middleware-endpoint" "^2.2.3" - "@smithy/middleware-retry" "^2.0.25" - "@smithy/middleware-serde" "^2.0.15" - "@smithy/middleware-stack" "^2.0.9" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/node-http-handler" "^2.2.1" - "@smithy/protocol-http" "^3.0.11" - "@smithy/smithy-client" "^2.2.0" - "@smithy/types" "^2.7.0" - "@smithy/url-parser" "^2.0.15" - "@smithy/util-base64" "^2.0.1" - "@smithy/util-body-length-browser" "^2.0.1" - "@smithy/util-body-length-node" "^2.1.0" - "@smithy/util-defaults-mode-browser" "^2.0.23" - "@smithy/util-defaults-mode-node" "^2.0.31" - "@smithy/util-endpoints" "^1.0.7" - "@smithy/util-retry" "^2.0.8" - "@smithy/util-utf8" "^2.0.2" + "@aws-sdk/core" "3.496.0" + "@aws-sdk/middleware-host-header" "3.496.0" + "@aws-sdk/middleware-logger" "3.496.0" + "@aws-sdk/middleware-recursion-detection" "3.496.0" + "@aws-sdk/middleware-user-agent" "3.496.0" + "@aws-sdk/region-config-resolver" "3.496.0" + "@aws-sdk/types" "3.496.0" + "@aws-sdk/util-endpoints" "3.496.0" + "@aws-sdk/util-user-agent-browser" "3.496.0" + "@aws-sdk/util-user-agent-node" "3.496.0" + "@smithy/config-resolver" "^2.1.1" + "@smithy/core" "^1.3.1" + "@smithy/fetch-http-handler" "^2.4.1" + "@smithy/hash-node" "^2.1.1" + "@smithy/invalid-dependency" "^2.1.1" + "@smithy/middleware-content-length" "^2.1.1" + "@smithy/middleware-endpoint" "^2.4.1" + "@smithy/middleware-retry" "^2.1.1" + "@smithy/middleware-serde" "^2.1.1" + "@smithy/middleware-stack" "^2.1.1" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/node-http-handler" "^2.3.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/url-parser" "^2.1.1" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-body-length-browser" "^2.1.1" + "@smithy/util-body-length-node" "^2.2.1" + "@smithy/util-defaults-mode-browser" "^2.1.1" + "@smithy/util-defaults-mode-node" "^2.1.1" + "@smithy/util-endpoints" "^1.1.1" + "@smithy/util-retry" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" tslib "^2.5.0" -"@aws-sdk/client-sts@3.484.0", "@aws-sdk/client-sts@^3.289.0": - version "3.484.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.484.0.tgz#57f84be8f0acf7b4fcbb666197282fcc1a04da97" - integrity sha512-psQxH0mYhTVvZhfca3s9NbXgnuOM8l+5LtF7fZBF5y4xaPpfAPicPWp6po69J3ynwyXi/MpHNXd/13d/L09TTA== +"@aws-sdk/client-sts@3.496.0", "@aws-sdk/client-sts@^3.289.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.496.0.tgz#e0c142cf8bb1aec7a9c7b09dd9739f6773d94fd0" + integrity sha512-3pSdqgegdwbK3CT1WvGHhA+Bf91R9cr8G1Ynp+iU2wZvy8ueJfMUk0NYfjo3EEv0YhSbMLKuduzZfvQHFHXYhw== dependencies: "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.481.0" - "@aws-sdk/credential-provider-node" "3.484.0" - "@aws-sdk/middleware-host-header" "3.468.0" - "@aws-sdk/middleware-logger" "3.468.0" - "@aws-sdk/middleware-recursion-detection" "3.468.0" - "@aws-sdk/middleware-user-agent" "3.478.0" - "@aws-sdk/region-config-resolver" "3.484.0" - "@aws-sdk/types" "3.468.0" - "@aws-sdk/util-endpoints" "3.478.0" - "@aws-sdk/util-user-agent-browser" "3.468.0" - "@aws-sdk/util-user-agent-node" "3.470.0" - "@smithy/config-resolver" "^2.0.22" - "@smithy/core" "^1.2.1" - "@smithy/fetch-http-handler" "^2.3.1" - "@smithy/hash-node" "^2.0.17" - "@smithy/invalid-dependency" "^2.0.15" - "@smithy/middleware-content-length" "^2.0.17" - "@smithy/middleware-endpoint" "^2.2.3" - "@smithy/middleware-retry" "^2.0.25" - "@smithy/middleware-serde" "^2.0.15" - "@smithy/middleware-stack" "^2.0.9" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/node-http-handler" "^2.2.1" - "@smithy/protocol-http" "^3.0.11" - "@smithy/smithy-client" "^2.2.0" - "@smithy/types" "^2.7.0" - "@smithy/url-parser" "^2.0.15" - "@smithy/util-base64" "^2.0.1" - "@smithy/util-body-length-browser" "^2.0.1" - "@smithy/util-body-length-node" "^2.1.0" - "@smithy/util-defaults-mode-browser" "^2.0.23" - "@smithy/util-defaults-mode-node" "^2.0.31" - "@smithy/util-endpoints" "^1.0.7" - "@smithy/util-middleware" "^2.0.8" - "@smithy/util-retry" "^2.0.8" - "@smithy/util-utf8" "^2.0.2" + "@aws-sdk/core" "3.496.0" + "@aws-sdk/credential-provider-node" "3.496.0" + "@aws-sdk/middleware-host-header" "3.496.0" + "@aws-sdk/middleware-logger" "3.496.0" + "@aws-sdk/middleware-recursion-detection" "3.496.0" + "@aws-sdk/middleware-user-agent" "3.496.0" + "@aws-sdk/region-config-resolver" "3.496.0" + "@aws-sdk/types" "3.496.0" + "@aws-sdk/util-endpoints" "3.496.0" + "@aws-sdk/util-user-agent-browser" "3.496.0" + "@aws-sdk/util-user-agent-node" "3.496.0" + "@smithy/config-resolver" "^2.1.1" + "@smithy/core" "^1.3.1" + "@smithy/fetch-http-handler" "^2.4.1" + "@smithy/hash-node" "^2.1.1" + "@smithy/invalid-dependency" "^2.1.1" + "@smithy/middleware-content-length" "^2.1.1" + "@smithy/middleware-endpoint" "^2.4.1" + "@smithy/middleware-retry" "^2.1.1" + "@smithy/middleware-serde" "^2.1.1" + "@smithy/middleware-stack" "^2.1.1" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/node-http-handler" "^2.3.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/url-parser" "^2.1.1" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-body-length-browser" "^2.1.1" + "@smithy/util-body-length-node" "^2.2.1" + "@smithy/util-defaults-mode-browser" "^2.1.1" + "@smithy/util-defaults-mode-node" "^2.1.1" + "@smithy/util-endpoints" "^1.1.1" + "@smithy/util-middleware" "^2.1.1" + "@smithy/util-retry" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" fast-xml-parser "4.2.5" tslib "^2.5.0" -"@aws-sdk/core@3.481.0": - version "3.481.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.481.0.tgz#e0ed1c1e8dc322237f81f0442ba0f8fbb20ef76f" - integrity sha512-UeyAc2FnWQDts81vPVBWKEj0WagYK4SVAgNfGcg6zCzzqsUG4unr4NPKQoca2L+XOU55yMCy+5l2K6R3YsFGKg== +"@aws-sdk/core@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.496.0.tgz#ec1394753b6b2f6e38aea593e30b2db5c7390969" + integrity sha512-yT+ug7Cw/3eJi7x2es0+46x12+cIJm5Xv+GPWsrTFD1TKgqO/VPEgfDtHFagDNbFmjNQA65Ygc/kEdIX9ICX/A== dependencies: - "@smithy/core" "^1.2.1" - "@smithy/protocol-http" "^3.0.11" - "@smithy/signature-v4" "^2.0.0" - "@smithy/smithy-client" "^2.2.0" - "@smithy/types" "^2.7.0" + "@smithy/core" "^1.3.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/signature-v4" "^2.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@aws-sdk/credential-provider-env@3.468.0": - version "3.468.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.468.0.tgz#4196d717d3f5485af863bd1fd84374ea3dcd6210" - integrity sha512-k/1WHd3KZn0EQYjadooj53FC0z24/e4dUZhbSKTULgmxyO62pwh9v3Brvw4WRa/8o2wTffU/jo54tf4vGuP/ZA== +"@aws-sdk/credential-provider-env@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.496.0.tgz#5055bd2e3a169e5c10b37c40e0f356046947e707" + integrity sha512-lukQMJ8SWWP5RqkRNOHi/H+WMhRvSWa3Fc5Jf/VP6xHiPLfF1XafcvthtV91e0VwPCiseI+HqChrcGq8pvnxHw== dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/types" "^2.7.0" + "@aws-sdk/types" "3.496.0" + "@smithy/property-provider" "^2.1.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@aws-sdk/credential-provider-ini@3.484.0": - version "3.484.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.484.0.tgz#558cb307a61afdee942987cc9735969f3d272675" - integrity sha512-BbvU7seI0RPPwpujnz4LA1lC53Cj4BOSRpYYZbrxA6C7SzW0D/IQBZQP3JBbrxIhqewSROSsYGDjvYbyi5aDEw== - dependencies: - "@aws-sdk/credential-provider-env" "3.468.0" - "@aws-sdk/credential-provider-process" "3.468.0" - "@aws-sdk/credential-provider-sso" "3.484.0" - "@aws-sdk/credential-provider-web-identity" "3.468.0" - "@aws-sdk/types" "3.468.0" - "@smithy/credential-provider-imds" "^2.0.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/shared-ini-file-loader" "^2.0.6" - "@smithy/types" "^2.7.0" +"@aws-sdk/credential-provider-ini@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.496.0.tgz#4de82fc173ba1581af4bf6fcad610f2fc0fd8ca1" + integrity sha512-2nD1jp1sIwcQaWK1y/9ruQOkW16RUxZpzgjbW/gnK3iiUXwx+/FNQWxshud+GTSx3Q4x6eIhqsbjtP4VVPPuUA== + dependencies: + "@aws-sdk/credential-provider-env" "3.496.0" + "@aws-sdk/credential-provider-process" "3.496.0" + "@aws-sdk/credential-provider-sso" "3.496.0" + "@aws-sdk/credential-provider-web-identity" "3.496.0" + "@aws-sdk/types" "3.496.0" + "@smithy/credential-provider-imds" "^2.2.1" + "@smithy/property-provider" "^2.1.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@aws-sdk/credential-provider-node@3.484.0": - version "3.484.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.484.0.tgz#4b7373724fef95374717e3fc83587ed696c8adbb" - integrity sha512-Ylqej3FqRwUD3I7929k214LRH1bUz7f2hfV4ZqY7teM9hQC5Ov5SpVtOtLKNfgaaxAkhD2ffMNfmq8TAg824+g== - dependencies: - "@aws-sdk/credential-provider-env" "3.468.0" - "@aws-sdk/credential-provider-ini" "3.484.0" - "@aws-sdk/credential-provider-process" "3.468.0" - "@aws-sdk/credential-provider-sso" "3.484.0" - "@aws-sdk/credential-provider-web-identity" "3.468.0" - "@aws-sdk/types" "3.468.0" - "@smithy/credential-provider-imds" "^2.0.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/shared-ini-file-loader" "^2.0.6" - "@smithy/types" "^2.7.0" +"@aws-sdk/credential-provider-node@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.496.0.tgz#734fc5aa824c387c893ff5624b201c0243ea1c7c" + integrity sha512-IVF9RvLePfRa5S5/eBIRChJCWOzQkGwM8P/L79Gl84u/cH2oSG4NtUI/YTDlrtmnYn7YsGhINSV0WnzfF2twfQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.496.0" + "@aws-sdk/credential-provider-ini" "3.496.0" + "@aws-sdk/credential-provider-process" "3.496.0" + "@aws-sdk/credential-provider-sso" "3.496.0" + "@aws-sdk/credential-provider-web-identity" "3.496.0" + "@aws-sdk/types" "3.496.0" + "@smithy/credential-provider-imds" "^2.2.1" + "@smithy/property-provider" "^2.1.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@aws-sdk/credential-provider-process@3.468.0": - version "3.468.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.468.0.tgz#770ed72db036c5d011445e5abf4a4bcc4424c486" - integrity sha512-OYSn1A/UsyPJ7Z8Q2cNhTf55O36shPmSsvOfND04nSfu1nPaR+VUvvsP7v+brhGpwC/GAKTIdGAo4blH31BS6A== +"@aws-sdk/credential-provider-process@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.496.0.tgz#1d623bed61229767f389feab560e3a3117bf2d26" + integrity sha512-/YZscCTGOKVmGr916Th4XF8Sz6JDtZ/n2loHG9exok9iy/qIbACsTRNLP9zexPxhPoue/oZqecY5xbVljfY34A== dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/shared-ini-file-loader" "^2.0.6" - "@smithy/types" "^2.7.0" + "@aws-sdk/types" "3.496.0" + "@smithy/property-provider" "^2.1.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@aws-sdk/credential-provider-sso@3.484.0": - version "3.484.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.484.0.tgz#3e639d45c674557c4d2505140ff2d031d2decab7" - integrity sha512-Fl7+YhrlU2icZkz18z9aj4SiWb2aQlWp5LsVqMfSzTlJFc9yPlD9e7F33gnL7kKLVSnAVxsr5v4y4pFC6FZUSw== - dependencies: - "@aws-sdk/client-sso" "3.484.0" - "@aws-sdk/token-providers" "3.484.0" - "@aws-sdk/types" "3.468.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/shared-ini-file-loader" "^2.0.6" - "@smithy/types" "^2.7.0" +"@aws-sdk/credential-provider-sso@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.496.0.tgz#1c5f2d25b64936b79095f49cabbcd7832fb87087" + integrity sha512-eP7GxpT2QYubSDG7uk1GJW4eNymZCq65IxDyEFCXOP/kfqkxriCY+iVEFG6/Mo3LxvgrgHXU4jxrCAXMAWN43g== + dependencies: + "@aws-sdk/client-sso" "3.496.0" + "@aws-sdk/token-providers" "3.496.0" + "@aws-sdk/types" "3.496.0" + "@smithy/property-provider" "^2.1.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@aws-sdk/credential-provider-web-identity@3.468.0": - version "3.468.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.468.0.tgz#5befcb593d99a84e16af9e9f285f0d59ed42771f" - integrity sha512-rexymPmXjtkwCPfhnUq3EjO1rSkf39R4Jz9CqiM7OsqK2qlT5Y/V3gnMKn0ZMXsYaQOMfM3cT5xly5R+OKDHlw== +"@aws-sdk/credential-provider-web-identity@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.496.0.tgz#7ad6d755445d1616a80dfa286a78c84dc1c3f14b" + integrity sha512-IbP+qLlvJSpNPj+zW6TtFuLRTK5Tf0hW+2pom4vFyi5YSH4pn8UOC136UdewX8vhXGS9BJQ5zBDMasIyl5VeGQ== dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/types" "^2.7.0" + "@aws-sdk/types" "3.496.0" + "@smithy/property-provider" "^2.1.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@aws-sdk/middleware-bucket-endpoint@3.484.0": - version "3.484.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.484.0.tgz#904d21096978f6d0bc286ef0354ea9c90f9ae121" - integrity sha512-FzaUGUAat+m96diDMdFTgaG7AiyYOtT97m1Iu4luZP47eiocaHsjgtaMXg1ivoH2atlczLn/7ueYqUnwEcpFlQ== - dependencies: - "@aws-sdk/types" "3.468.0" - "@aws-sdk/util-arn-parser" "3.465.0" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/protocol-http" "^3.0.11" - "@smithy/types" "^2.7.0" - "@smithy/util-config-provider" "^2.1.0" +"@aws-sdk/middleware-bucket-endpoint@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.496.0.tgz#10a6e48b836321f32226790ffebcba1f281107ce" + integrity sha512-B+ilBMSs3+LJuo2bl2KB8GFdu+8PPVtYEWtwhNkmnaU8iMisgMBp5uuM8sUDvJX7I4iSF0WbgnhguX4cJqfAew== + dependencies: + "@aws-sdk/types" "3.496.0" + "@aws-sdk/util-arn-parser" "3.495.0" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" + "@smithy/util-config-provider" "^2.2.1" tslib "^2.5.0" -"@aws-sdk/middleware-expect-continue@3.468.0": - version "3.468.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.468.0.tgz#664f7f1238e7bfb633cd44753f8cfb1a62ac624a" - integrity sha512-/wmLjmfgeulxhhmnxX3X3N933TvGsYckVIFjAtDSpLjqkbwzEcNiLq7AdmNJ4BfxG0MCMgcht561DCCD19x8Bg== +"@aws-sdk/middleware-expect-continue@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.496.0.tgz#1b9f45451ddc3daccfc332d4bb3fdac9b2e54881" + integrity sha512-+exo5DVc+BeDus2iI6Fz1thefHGDXxUhHZ+4VHQ6HkStMy3Y22HugyEGHSQZmtRL86Hjr7dFbEWFsC47a2ItGA== dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/protocol-http" "^3.0.11" - "@smithy/types" "^2.7.0" + "@aws-sdk/types" "3.496.0" + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@aws-sdk/middleware-flexible-checksums@3.468.0": - version "3.468.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.468.0.tgz#96e26042e61724a4981edb3ba3fd2af280df57b6" - integrity sha512-LQwL/N5MCj3Y5keLLewHTqeAXUIMsHFZyxDXRm/uxrOon9ufLKDvGvzAmfwn1/CuSUo66ZfT8VPSA4BsC90RtA== +"@aws-sdk/middleware-flexible-checksums@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.496.0.tgz#a06a553e243eed2d6a35f1353f85e279f2a977dc" + integrity sha512-yQIWfjEMvgsAJ7ku224vXDjXPD+f9zfKZFialJva8VUlEr7hQp4CQ0rxV3YThSaixKEDDs5k6kOjWAd2BPGr2A== dependencies: "@aws-crypto/crc32" "3.0.0" "@aws-crypto/crc32c" "3.0.0" - "@aws-sdk/types" "3.468.0" - "@smithy/is-array-buffer" "^2.0.0" - "@smithy/protocol-http" "^3.0.11" - "@smithy/types" "^2.7.0" - "@smithy/util-utf8" "^2.0.2" + "@aws-sdk/types" "3.496.0" + "@smithy/is-array-buffer" "^2.1.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" + "@smithy/util-utf8" "^2.1.1" tslib "^2.5.0" -"@aws-sdk/middleware-host-header@3.468.0": - version "3.468.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.468.0.tgz#6da7b19032e9afccea54fbf8aa10cccd2f817bcf" - integrity sha512-gwQ+/QhX+lhof304r6zbZ/V5l5cjhGRxLL3CjH1uJPMcOAbw9wUlMdl+ibr8UwBZ5elfKFGiB1cdW/0uMchw0w== +"@aws-sdk/middleware-host-header@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.496.0.tgz#e17de11d553548872566c72669c5ea2e7164722b" + integrity sha512-jUdPpSJeqCYXf6hSjfwsfHway7peIV8Vz51w/BN91bF4vB/bYwAC5o9/iJiK/EoByp5asxA8fg9wFOyGjzdbLg== dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/protocol-http" "^3.0.11" - "@smithy/types" "^2.7.0" + "@aws-sdk/types" "3.496.0" + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@aws-sdk/middleware-location-constraint@3.468.0": - version "3.468.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.468.0.tgz#cc9ebcdabed96414fc91f4a39b3b7c08e6374187" - integrity sha512-0gBX/lDynQr4YIhM9h1dVnkVWqrg+34iOCVIUq8jHxzUzgZWglGkG9lHGGg0r1xkLTmegeoo1OKH8wrQ6n33Cg== +"@aws-sdk/middleware-location-constraint@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.496.0.tgz#b44ae48bddf8409c2c55a36a4f406661fcd729be" + integrity sha512-i4ocJ2Zs86OtPREbB18InFukhqg2qtBxb5gywv79IHDPVmpOYE4m/3v3yGUrkjfF2GTlUL0k5FskNNqw41yfng== dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/types" "^2.7.0" + "@aws-sdk/types" "3.496.0" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@aws-sdk/middleware-logger@3.468.0": - version "3.468.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.468.0.tgz#a1883fb7ad8e156444d30689de4ab897357ef1d8" - integrity sha512-X5XHKV7DHRXI3f29SAhJPe/OxWRFgDWDMMCALfzhmJfCi6Jfh0M14cJKoC+nl+dk9lB+36+jKjhjETZaL2bPlA== +"@aws-sdk/middleware-logger@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.496.0.tgz#96f867ae50144eb6bae91a427e315a0f0eb783b0" + integrity sha512-EwMVSY6iBMeGbVnvwdaFl/ClMS/YWtxCAo+bcEtgk8ltRuo7qgbJem8Km/fvWC1vdWvIbe4ArdJ8iGzq62ffAw== dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/types" "^2.7.0" + "@aws-sdk/types" "3.496.0" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@aws-sdk/middleware-recursion-detection@3.468.0": - version "3.468.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.468.0.tgz#85b05636a5c2638bf9e15c8b6be17654757e1bf4" - integrity sha512-vch9IQib2Ng9ucSyRW2eKNQXHUPb5jUPCLA5otTW/8nGjcOU37LxQG4WrxO7uaJ9Oe8hjHO+hViE3P0KISUhtA== +"@aws-sdk/middleware-recursion-detection@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.496.0.tgz#c14e1bbe609e4af3ec9037c2379e2b64d660e4dd" + integrity sha512-+IuOcFsfqg2WAnaEzH6KhVbicqCxtOq9w3DH2jwTpddRlCx2Kqf6wCzg8luhHRGyjBZdsbIS+OXwyMevoppawA== dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/protocol-http" "^3.0.11" - "@smithy/types" "^2.7.0" + "@aws-sdk/types" "3.496.0" + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@aws-sdk/middleware-sdk-s3@3.484.0": - version "3.484.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.484.0.tgz#67dc121bd4a9f2147ac566990f4dceeee87e454d" - integrity sha512-7K/HcCBQov5nRp3M25APm+6hqrFp4RDc+0NMcA1DGTWKwfYAEqZzn1AurxBCE/nTR4iECV9y1IwdIp8FTdYKSQ== - dependencies: - "@aws-sdk/types" "3.468.0" - "@aws-sdk/util-arn-parser" "3.465.0" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/protocol-http" "^3.0.11" - "@smithy/signature-v4" "^2.0.0" - "@smithy/smithy-client" "^2.2.0" - "@smithy/types" "^2.7.0" - "@smithy/util-config-provider" "^2.1.0" +"@aws-sdk/middleware-sdk-s3@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.496.0.tgz#8d15cd44578da34159d99282b5de734a0f50db7c" + integrity sha512-OKrTPzubisQCQzPuF4G7jmbYt71o6W7oefmW9zm1MpGokRSJeC9zv4aT1gkMglpXEHgvL0S5fUVGi0AtF/F8Kw== + dependencies: + "@aws-sdk/types" "3.496.0" + "@aws-sdk/util-arn-parser" "3.495.0" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/signature-v4" "^2.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/util-config-provider" "^2.2.1" tslib "^2.5.0" -"@aws-sdk/middleware-signing@3.468.0": - version "3.468.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.468.0.tgz#d1b5a92c395f55063cfa72ee95e4921b16f4c515" - integrity sha512-s+7fSB1gdnnTj5O0aCCarX3z5Vppop8kazbNSZADdkfHIDWCN80IH4ZNjY3OWqaAz0HmR4LNNrovdR304ojb4Q== - dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/protocol-http" "^3.0.11" - "@smithy/signature-v4" "^2.0.0" - "@smithy/types" "^2.7.0" - "@smithy/util-middleware" "^2.0.8" +"@aws-sdk/middleware-signing@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.496.0.tgz#265cb5a9d7825c111c53bb555e5cb2619f804dd1" + integrity sha512-Oq73Brs4IConvWnRlh8jM1V7LHoTw9SVQklu/QW2FPlNrB3B8fuTdWHHYIWv7ybw1bykXoCY99v865Mmq/Or/g== + dependencies: + "@aws-sdk/types" "3.496.0" + "@smithy/property-provider" "^2.1.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/signature-v4" "^2.1.1" + "@smithy/types" "^2.9.1" + "@smithy/util-middleware" "^2.1.1" tslib "^2.5.0" -"@aws-sdk/middleware-ssec@3.468.0": - version "3.468.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.468.0.tgz#8fe4ccfd6f0689b77b230ce17e44438d1ce1b419" - integrity sha512-y1qLW24wRkOGBTK5d6eJXf6d8HYo4rzT4a1mNDN1rd18NSffwQ6Yke5qeUiIaxa0y/l+FvvNYErbhYtij2rJoQ== +"@aws-sdk/middleware-ssec@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.496.0.tgz#89f28c34584b2b032c36859440c3b64d800b052a" + integrity sha512-6RUFEgGqKGq8N8W9tsctS8KRlYnmD/yiExb/LvblCJqV1DWoD0psRFWNz8TQZtujHklG5dHjuq+aN/qicjBNdw== dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/types" "^2.7.0" + "@aws-sdk/types" "3.496.0" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@aws-sdk/middleware-user-agent@3.478.0": - version "3.478.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.478.0.tgz#5b98d02ccaa8db880fb59096e5389960c4262fbe" - integrity sha512-Rec+nAPIzzwxgHPW+xqY6tooJGFOytpYg/xSRv8/IXl3xKGhmpMGs6gDWzmMBv/qy5nKTvLph/csNWJ98GWXCw== +"@aws-sdk/middleware-user-agent@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.496.0.tgz#82b49fd8613ae5a9ceafc9117c34271615d0f002" + integrity sha512-+iMtRxFk0GmFWNUF4ilxylOQd9PZdR4ZC9jkcPIh1PZlvKtpCyFywKlk5RRZKklSoJ/CttcqwhMvOXTNbWm/0w== dependencies: - "@aws-sdk/types" "3.468.0" - "@aws-sdk/util-endpoints" "3.478.0" - "@smithy/protocol-http" "^3.0.11" - "@smithy/types" "^2.7.0" + "@aws-sdk/types" "3.496.0" + "@aws-sdk/util-endpoints" "3.496.0" + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@aws-sdk/region-config-resolver@3.484.0": - version "3.484.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.484.0.tgz#fb480b68a3c1b2bddf1c67eecf8b8966114179f7" - integrity sha512-qfYSwSIc9GasHFrJidydlQE433mB93d31dfypFWhrJPXRv1fhopO72NSfsY2WCcbaRkADc4AajLZFly4J96abw== +"@aws-sdk/region-config-resolver@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.496.0.tgz#133c8a4a6d5e7672077ba124751f40b2d6efc3ed" + integrity sha512-URrNVOPHPgEDm6QFu6lDC2cUFs+Jx23mA3jEwCvoKlXiEY/ZoWjH8wlX3OMUlLrF1qoUTuD03jjrJzF6zoCgug== dependencies: - "@smithy/node-config-provider" "^2.1.8" - "@smithy/types" "^2.7.0" - "@smithy/util-config-provider" "^2.1.0" - "@smithy/util-middleware" "^2.0.8" + "@aws-sdk/types" "3.496.0" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/types" "^2.9.1" + "@smithy/util-config-provider" "^2.2.1" + "@smithy/util-middleware" "^2.1.1" tslib "^2.5.0" -"@aws-sdk/signature-v4-multi-region@3.484.0": - version "3.484.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.484.0.tgz#d61e3ebe05186fe4a5ba9ecec5534b9e938df48d" - integrity sha512-9LrO9Le/oB7+9NITeW2RcO4V4EAfOCbxE9TvwRbg5CEvWgBdMU7qc1ZnCPXF4i2AsGTsnRUlzaql/M7/ln2lIg== +"@aws-sdk/signature-v4-multi-region@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.496.0.tgz#0084ad38ab25dc50d5965d31a9c659673d82e86f" + integrity sha512-zi3cL8+dRVSvC0PA6votwEHF4l9uxOyQTiRfgpFgzJ9iiPbsrtWCalGCwN0UyzmeDv7eViU6FK1YTHH/OgDJ4A== dependencies: - "@aws-sdk/middleware-sdk-s3" "3.484.0" - "@aws-sdk/types" "3.468.0" - "@smithy/protocol-http" "^3.0.11" - "@smithy/signature-v4" "^2.0.0" - "@smithy/types" "^2.7.0" + "@aws-sdk/middleware-sdk-s3" "3.496.0" + "@aws-sdk/types" "3.496.0" + "@smithy/protocol-http" "^3.1.1" + "@smithy/signature-v4" "^2.1.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@aws-sdk/token-providers@3.484.0": - version "3.484.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.484.0.tgz#68ee9b3e99a0fac943963e81340fee555e10e3c9" - integrity sha512-9Eb7X0sNhJANfYCeEYWCvfeD4shMZEse3YUz5EALzbpzi/So56ZaeA/lWWeh0fkYiByq74eA2QkC/tXZkHw6EQ== +"@aws-sdk/token-providers@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.496.0.tgz#5b5baf0801fd591de4a28146afbdc8250197f9fa" + integrity sha512-fyi8RcObEa1jNETJdc2H6q9VHrrdKCj/b6+fbLvymb7mUVRd0aWUn+24SNUImnSOnrwYnwaMfyyEC388X4MbFQ== dependencies: "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/middleware-host-header" "3.468.0" - "@aws-sdk/middleware-logger" "3.468.0" - "@aws-sdk/middleware-recursion-detection" "3.468.0" - "@aws-sdk/middleware-user-agent" "3.478.0" - "@aws-sdk/region-config-resolver" "3.484.0" - "@aws-sdk/types" "3.468.0" - "@aws-sdk/util-endpoints" "3.478.0" - "@aws-sdk/util-user-agent-browser" "3.468.0" - "@aws-sdk/util-user-agent-node" "3.470.0" - "@smithy/config-resolver" "^2.0.22" - "@smithy/fetch-http-handler" "^2.3.1" - "@smithy/hash-node" "^2.0.17" - "@smithy/invalid-dependency" "^2.0.15" - "@smithy/middleware-content-length" "^2.0.17" - "@smithy/middleware-endpoint" "^2.2.3" - "@smithy/middleware-retry" "^2.0.25" - "@smithy/middleware-serde" "^2.0.15" - "@smithy/middleware-stack" "^2.0.9" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/node-http-handler" "^2.2.1" - "@smithy/property-provider" "^2.0.0" - "@smithy/protocol-http" "^3.0.11" - "@smithy/shared-ini-file-loader" "^2.0.6" - "@smithy/smithy-client" "^2.2.0" - "@smithy/types" "^2.7.0" - "@smithy/url-parser" "^2.0.15" - "@smithy/util-base64" "^2.0.1" - "@smithy/util-body-length-browser" "^2.0.1" - "@smithy/util-body-length-node" "^2.1.0" - "@smithy/util-defaults-mode-browser" "^2.0.23" - "@smithy/util-defaults-mode-node" "^2.0.31" - "@smithy/util-endpoints" "^1.0.7" - "@smithy/util-retry" "^2.0.8" - "@smithy/util-utf8" "^2.0.2" + "@aws-sdk/middleware-host-header" "3.496.0" + "@aws-sdk/middleware-logger" "3.496.0" + "@aws-sdk/middleware-recursion-detection" "3.496.0" + "@aws-sdk/middleware-user-agent" "3.496.0" + "@aws-sdk/region-config-resolver" "3.496.0" + "@aws-sdk/types" "3.496.0" + "@aws-sdk/util-endpoints" "3.496.0" + "@aws-sdk/util-user-agent-browser" "3.496.0" + "@aws-sdk/util-user-agent-node" "3.496.0" + "@smithy/config-resolver" "^2.1.1" + "@smithy/fetch-http-handler" "^2.4.1" + "@smithy/hash-node" "^2.1.1" + "@smithy/invalid-dependency" "^2.1.1" + "@smithy/middleware-content-length" "^2.1.1" + "@smithy/middleware-endpoint" "^2.4.1" + "@smithy/middleware-retry" "^2.1.1" + "@smithy/middleware-serde" "^2.1.1" + "@smithy/middleware-stack" "^2.1.1" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/node-http-handler" "^2.3.1" + "@smithy/property-provider" "^2.1.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/url-parser" "^2.1.1" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-body-length-browser" "^2.1.1" + "@smithy/util-body-length-node" "^2.2.1" + "@smithy/util-defaults-mode-browser" "^2.1.1" + "@smithy/util-defaults-mode-node" "^2.1.1" + "@smithy/util-endpoints" "^1.1.1" + "@smithy/util-retry" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" tslib "^2.5.0" "@aws-sdk/types@3.370.0": @@ -584,28 +635,29 @@ "@smithy/types" "^1.1.0" tslib "^2.5.0" -"@aws-sdk/types@3.468.0", "@aws-sdk/types@^3.222.0": - version "3.468.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.468.0.tgz#f97b34fc92a800d1d8b866f47693ae8f3d46517b" - integrity sha512-rx/9uHI4inRbp2tw3Y4Ih4PNZkVj32h7WneSg3MVgVjAoVD5Zti9KhS5hkvsBxfgmQmg0AQbE+b1sy5WGAgntA== +"@aws-sdk/types@3.496.0", "@aws-sdk/types@^3.222.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.496.0.tgz#cdde44a94a57cf8f97cf05e4d0bdce2f56ce4eeb" + integrity sha512-umkGadK4QuNQaMoDICMm7NKRI/mYSXiyPjcn3d53BhsuArYU/52CebGQKdt4At7SwwsiVJZw9RNBHyN5Mm0HVw== dependencies: - "@smithy/types" "^2.7.0" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@aws-sdk/util-arn-parser@3.465.0": - version "3.465.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.465.0.tgz#2896f6b06f69770378586853c97a0f283cbb2e20" - integrity sha512-zOJ82vzDJFqBX9yZBlNeHHrul/kpx/DCoxzW5UBbZeb26kfV53QhMSoEmY8/lEbBqlqargJ/sgRC845GFhHNQw== +"@aws-sdk/util-arn-parser@3.495.0": + version "3.495.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.495.0.tgz#539f2d6dfef343a80324348f1f9a1b7eed2390f3" + integrity sha512-hwdA3XAippSEUxs7jpznwD63YYFR+LtQvlEcebPTgWR9oQgG9TfS+39PUfbnEeje1ICuOrN3lrFqFbmP9uzbMg== dependencies: tslib "^2.5.0" -"@aws-sdk/util-endpoints@3.478.0": - version "3.478.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.478.0.tgz#d39c5667f22a7cbd2af93cdd6d883d25ef84e374" - integrity sha512-u9Mcg3euGJGs5clPt9mBuhBjHiEKiD0PnfvArhfq9i+dcY5mbCq/i1Dezp3iv1fZH9xxQt7hPXDfSpt1yUSM6g== +"@aws-sdk/util-endpoints@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.496.0.tgz#5ce7d3efd7ab67db556e2c199e73826c44d22ecd" + integrity sha512-1QzOiWHi383ZwqSi/R2KgKCd7M+6DxkxI5acqLPm8mvDRDP2jRjrnVaC0g9/tlttWousGEemDUWStwrD2mVYSw== dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/util-endpoints" "^1.0.7" + "@aws-sdk/types" "3.496.0" + "@smithy/types" "^2.9.1" + "@smithy/util-endpoints" "^1.1.1" tslib "^2.5.0" "@aws-sdk/util-locate-window@^3.0.0": @@ -615,24 +667,24 @@ dependencies: tslib "^2.3.1" -"@aws-sdk/util-user-agent-browser@3.468.0": - version "3.468.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.468.0.tgz#095caecb3fd75104ee38ae81ed78821de0f58e28" - integrity sha512-OJyhWWsDEizR3L+dCgMXSUmaCywkiZ7HSbnQytbeKGwokIhD69HTiJcibF/sgcM5gk4k3Mq3puUhGnEZ46GIig== +"@aws-sdk/util-user-agent-browser@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.496.0.tgz#494b086dd8b07acdd6be65034c51545e5bcee37b" + integrity sha512-4j2spN+h0I0qfSMsGvJXTfQBu1e18rPdekKvzsGJxhaAE1tNgUfUT4nbvc5uVn0sNjZmirskmJ3kfbzVOrqIFg== dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/types" "^2.7.0" + "@aws-sdk/types" "3.496.0" + "@smithy/types" "^2.9.1" bowser "^2.11.0" tslib "^2.5.0" -"@aws-sdk/util-user-agent-node@3.470.0": - version "3.470.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.470.0.tgz#b78605f336859d6c3b5f573cff931ce41f83a27d" - integrity sha512-QxsZ9iVHcBB/XRdYvwfM5AMvNp58HfqkIrH88mY0cmxuvtlIGDfWjczdDrZMJk9y0vIq+cuoCHsGXHu7PyiEAQ== +"@aws-sdk/util-user-agent-node@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.496.0.tgz#db14e02cf82af556c826570efc7db1e57de3262d" + integrity sha512-h0Ax0jlDc7UIo3KoSI4C4tVLBFoiAdx3+DhTVfgLS7x93d41dMlziPoBX2RgdcFn37qnzw6AQKTVTMwDbRCGpg== dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/types" "^2.7.0" + "@aws-sdk/types" "3.496.0" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" "@aws-sdk/util-utf8-browser@^3.0.0": @@ -651,12 +703,12 @@ "@aws-sdk/types" "3.370.0" tslib "^2.5.0" -"@aws-sdk/xml-builder@3.472.0": - version "3.472.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.472.0.tgz#fe804e26517779868f7093e361dce4816be546d6" - integrity sha512-PwjVxz1hr9up8QkddabuScPZ/d5aDHgvHYgK4acHYzltXL4wngfvimi5ZqXTzVWF2QANxHmWnHUr45QJX71oJQ== +"@aws-sdk/xml-builder@3.496.0": + version "3.496.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.496.0.tgz#7d0ef487a8088ef84a5a9aad228e6173ca85341d" + integrity sha512-GvEjh537IIeOw1ZkZuB37sV12u+ipS5Z1dwjEC/HAvhl5ac23ULtTr1/n+U1gLNN+BAKSWjKiQ2ksj8DiUzeyw== dependencies: - "@smithy/types" "^2.7.0" + "@smithy/types" "^2.9.1" tslib "^2.5.0" "@azure/abort-controller@^1.0.0": @@ -898,15 +950,6 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.0" -"@babel/generator@7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.2.tgz#33873d6f89b21efe2da63fe554460f3df1c5880d" - integrity sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw== - dependencies: - "@babel/types" "^7.18.2" - "@jridgewell/gen-mapping" "^0.3.0" - jsesc "^2.5.1" - "@babel/generator@^7.21.0", "@babel/generator@^7.7.2": version "7.21.1" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.1.tgz#951cc626057bc0af2c35cd23e9c64d384dea83dd" @@ -1010,16 +1053,16 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.18.10", "@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-string-parser@^7.19.4": version "7.19.4" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== +"@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.14.9", "@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" @@ -1030,11 +1073,6 @@ 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-identifier@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" - integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== - "@babel/helper-validator-option@^7.18.6": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" @@ -1067,11 +1105,6 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@7.18.4": - version "7.18.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.4.tgz#6774231779dd700e0af29f6ad8d479582d7ce5ef" - integrity sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow== - "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.0": version "7.21.2" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3" @@ -1221,15 +1254,6 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.0.tgz#75f21d73d73dc0351f3368d28db73465f4814600" - integrity sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA== - dependencies: - "@babel/helper-string-parser" "^7.18.10" - "@babel/helper-validator-identifier" "^7.18.6" - to-fast-properties "^2.0.0" - "@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3": version "7.21.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.2.tgz#92246f6e00f91755893c2876ad653db70c8310d1" @@ -1239,15 +1263,6 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" -"@babel/types@^7.18.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" - integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - to-fast-properties "^2.0.0" - "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" @@ -1588,9 +1603,9 @@ fast-json-stringify "^5.7.0" "@fastify/request-context@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@fastify/request-context/-/request-context-5.0.0.tgz#f821c98ff5a930da9d26b2dce831420d86f5db14" - integrity sha512-HEJoAF5+28PO9kcX+A7vFY0vv45k4Fllzp7rzDyaZ9Lcz99YQmMsXVS1GWkhy+24jv5SWNyyZiiJklSa6BiFPA== + version "5.1.0" + resolved "https://registry.yarnpkg.com/@fastify/request-context/-/request-context-5.1.0.tgz#e1fdc103767af977485f19501c117eb59a49d30a" + integrity sha512-PM7wrLJOEylVDpxabOFLaYsdAiaa0lpDUcP2HMFJ1JzgiWuC6k4r3duf6Pm9YLnzlGmT+Yp4tkQjqsu7V/pSOA== dependencies: fastify-plugin "^4.0.0" @@ -2069,15 +2084,6 @@ "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/gen-mapping@^0.3.0": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - "@jridgewell/gen-mapping@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" @@ -2160,10 +2166,10 @@ optionalDependencies: openid-client "^5.3.0" -"@lerna/create@8.0.1": - version "8.0.1" - resolved "https://registry.npmjs.org/@lerna/create/-/create-8.0.1.tgz#cc0ab19163c67269552292d95f23568468fa9921" - integrity sha512-PDYNUF8Nv5j7DbGvVbizEuYuQbNFZ0+wVOtRPvBQOkC2dMNryi3dJjktEd1QeDX6Wa/JkJWvZ5SMHyr+7H3Rtg== +"@lerna/create@8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-8.0.2.tgz#30d1ed29bb2f97d579546759e48f472a4ce9dba2" + integrity sha512-AueSlfiYXqEmy9/EIc17mjlaHFuv734dfgVBegyoefIA7hdeoExtsXnACWf8Tw5af6gwyTL3KAp6QQyc1sTuZQ== dependencies: "@npmcli/run-script" "7.0.2" "@nx/devkit" ">=17.1.2 < 18" @@ -2577,11 +2583,12 @@ resolved "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.2.6.tgz#07fde42a0fe1f8f103aa7afd1db83cb76a72951f" integrity sha512-LrJySMWrO5oWMrP4VOWM1hr3c4rtxHGCcRy19VwqvaAPDrnsg0qfPjv4q1C9YyIU8sj+T3oJs1yZdnNntlN8ew== -"@oclif/core@^2.15.0", "@oclif/core@^3.0.4", "@oclif/core@^3.11.0", "@oclif/core@^3.15.1": - version "3.15.1" - resolved "https://registry.npmjs.org/@oclif/core/-/core-3.15.1.tgz#e03fa775d658e76056150ac0c7b8097b6f51ab9c" - integrity sha512-d4457zVo2agLoJG97CmdY6M3BeP5sogBP3BtP65hUvJH6wA6Us1hdY3UiPPtD/ZzZImq7cATVMABuCF9tM+rWA== +"@oclif/core@^2.15.0", "@oclif/core@^3.15.1", "@oclif/core@^3.16.0", "@oclif/core@^3.18.1": + version "3.18.1" + resolved "https://registry.yarnpkg.com/@oclif/core/-/core-3.18.1.tgz#a8c9ee3848ad663d5694bef6079116c70d32fc55" + integrity sha512-l0LsjzGcqjbUEdeSBX6bdZieVmEv82Q0W3StiyaDMEnPZ9KLH28HrLpcZg6d50mCYW9CUZNzmRo6qrCHWrgLKw== dependencies: + "@types/cli-progress" "^3.11.5" ansi-escapes "^4.3.2" ansi-styles "^4.3.0" cardinal "^2.1.1" @@ -2605,33 +2612,39 @@ strip-ansi "^6.0.1" supports-color "^8.1.1" supports-hyperlinks "^2.2.0" - tsconfck "^3.0.0" widest-line "^3.1.0" wordwrap "^1.0.0" wrap-ansi "^7.0.0" -"@oclif/plugin-help@^5", "@oclif/plugin-help@^5.2.14": +"@oclif/plugin-help@^5": version "5.2.20" resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-5.2.20.tgz#4035a0ac231f95fb8e334da342175e3ca00f6abc" integrity sha512-u+GXX/KAGL9S10LxAwNUaWdzbEBARJ92ogmM7g3gDVud2HioCmvWQCDohNRVZ9GYV9oKwZ/M8xwd6a1d95rEKQ== dependencies: "@oclif/core" "^2.15.0" -"@oclif/plugin-not-found@^2.3.32": - version "2.4.3" - resolved "https://registry.yarnpkg.com/@oclif/plugin-not-found/-/plugin-not-found-2.4.3.tgz#3d24095adb0f3876cb4bcfdfdcb775086cf6d4b5" - integrity sha512-nIyaR4y692frwh7wIHZ3fb+2L6XEecQwRDIb4zbEam0TvaVmBQWZoColQyWA84ljFBPZ8XWiQyTz+ixSwdRkqg== +"@oclif/plugin-help@^6.0.9": + version "6.0.10" + resolved "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.0.10.tgz#3a38e94a3f431a2b398679a433ace76a2d0c320d" + integrity sha512-vgAcEVtwsI49H/TllBL/7YlQvUSjR3+nVxb0ipSmbHbEUw5p5q6fcNc3R+N9JHvaa4tc8tjyg35APZAKSaM6xw== dependencies: - "@oclif/core" "^2.15.0" - chalk "^4" + "@oclif/core" "^3.16.0" + +"@oclif/plugin-not-found@^3.0.8": + version "3.0.9" + resolved "https://registry.yarnpkg.com/@oclif/plugin-not-found/-/plugin-not-found-3.0.9.tgz#3bea019cb4a4ff8d4db4b68bddce4636bfefdb05" + integrity sha512-t/Cq8o6ENmMG0nPxeLDjtRsu4ZLKGCkNfev8XQ28Z+P1ntnP6uKpmKpvmmgatmqtX0IHuNrpv9scU3G4iAGp2w== + dependencies: + "@oclif/core" "^3.18.1" + chalk "^5.3.0" fast-levenshtein "^3.0.0" -"@oclif/plugin-warn-if-update-available@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.0.3.tgz#0609096a5272ffc97124111453825a33e899ae6f" - integrity sha512-p9Ai5olqj52NTndtntFbVreRCtJg9dgnfAl5Zi6hmIpgzVtPYDxLwa3PnMufKFc3fUkno5xnJ0TsKfxt0QruDw== +"@oclif/plugin-warn-if-update-available@^3.0.9": + version "3.0.9" + resolved "https://registry.yarnpkg.com/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.0.9.tgz#f4346f4040adf71d0a120381de2fe4c8411896fd" + integrity sha512-6XjYNJWWu6B4LyW73hzuM9Ihb23WamrABZhwYVJTVMBHdU30pRa1i3rvHCPfmn5c4iv8ZXudS/0zCNuhR121ng== dependencies: - "@oclif/core" "^3.11.0" + "@oclif/core" "^3.16.0" chalk "^5.3.0" debug "^4.1.0" http-call "^5.2.2" @@ -3199,357 +3212,320 @@ dependencies: "@sinonjs/commons" "^2.0.0" -"@smithy/abort-controller@^2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.0.15.tgz#fcec9193da8b86eef1eedc3e71139a99c061db32" - integrity sha512-JkS36PIS3/UCbq/MaozzV7jECeL+BTt4R75bwY8i+4RASys4xOyUS1HsRyUNSqUXFP4QyCz5aNnh3ltuaxv+pw== - dependencies: - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@smithy/chunked-blob-reader-native@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.1.tgz#0599eaed8c2cd15c7ab43a1838cef1258ff27133" - integrity sha512-N2oCZRglhWKm7iMBu7S6wDzXirjAofi7tAd26cxmgibRYOBS4D3hGfmkwCpHdASZzwZDD8rluh0Rcqw1JeZDRw== +"@smithy/abort-controller@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.1.1.tgz#bb68596a7c8213c2ef259bc7fb0f0c118c67ea9d" + integrity sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q== dependencies: - "@smithy/util-base64" "^2.0.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/chunked-blob-reader@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz#c44fe2c780eaf77f9e5381d982ac99a880cce51b" - integrity sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg== +"@smithy/chunked-blob-reader-native@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.1.1.tgz#6b98479c8f6ea94832dd6a6e5ca78969a44eafe1" + integrity sha512-zNW+43dltfNMUrBEYLMWgI8lQr0uhtTcUyxkgC9EP4j17WREzgSFMPUFVrVV6Rc2+QtWERYjb4tzZnQGa7R9fQ== dependencies: + "@smithy/util-base64" "^2.1.1" tslib "^2.5.0" -"@smithy/config-resolver@^2.0.22": - version "2.0.22" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.0.22.tgz#c994a7d09d3c6f9e9a97a029db2ae16a8fbb0838" - integrity sha512-YuPjsLnq6I5ZQBTx6BL5NsCLtcLel5YIMf3gDeEa+GSCXn5mgRXm+8XO8HtjR3Xf69b88aY4c7bwKQQS2i8vtA== +"@smithy/chunked-blob-reader@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.1.1.tgz#997faba8e197e0cb9824dad30ae581466e386e57" + integrity sha512-NjNFCKxC4jVvn+lUr3Yo4/PmUJj3tbyqH6GNHueyTGS5Q27vlEJ1MkNhUDV8QGxJI7Bodnc2pD18lU2zRfhHlQ== dependencies: - "@smithy/node-config-provider" "^2.1.8" - "@smithy/types" "^2.7.0" - "@smithy/util-config-provider" "^2.1.0" - "@smithy/util-middleware" "^2.0.8" tslib "^2.5.0" -"@smithy/core@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.2.1.tgz#2ee9b9894f3b2ce5eac4010ea1a85874b446f203" - integrity sha512-f6cwmMuHo7RIw/c184NBd2rGeGvGIX6p55HSrG5jfR3qkNYo80PHRfhzkJMq1+mv1ZjI5p8NhenWMMkIRJR4tw== - dependencies: - "@smithy/middleware-endpoint" "^2.2.3" - "@smithy/middleware-retry" "^2.0.25" - "@smithy/middleware-serde" "^2.0.15" - "@smithy/protocol-http" "^3.0.11" - "@smithy/smithy-client" "^2.2.0" - "@smithy/types" "^2.7.0" - "@smithy/util-middleware" "^2.0.8" - tslib "^2.5.0" - -"@smithy/credential-provider-imds@^2.0.0": - version "2.0.18" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.18.tgz#9a5b8be3f268bb4ac7b7ef321f57b0e9a61e2940" - integrity sha512-QnPBi6D2zj6AHJdUTo5zXmk8vwHJ2bNevhcVned1y+TZz/OI5cizz5DsYNkqFUIDn8tBuEyKNgbmKVNhBbuY3g== +"@smithy/config-resolver@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.1.1.tgz#fc6b036084b98fd26a8ff01a5d7eb676e41749c7" + integrity sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw== dependencies: - "@smithy/node-config-provider" "^2.1.3" - "@smithy/property-provider" "^2.0.13" - "@smithy/types" "^2.4.0" - "@smithy/url-parser" "^2.0.12" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/types" "^2.9.1" + "@smithy/util-config-provider" "^2.2.1" + "@smithy/util-middleware" "^2.1.1" tslib "^2.5.0" -"@smithy/credential-provider-imds@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.4.tgz#126adf69eac333f23f8683edbfabdc2b3b2deb15" - integrity sha512-cwPJN1fa1YOQzhBlTXRavABEYRRchci1X79QRwzaNLySnIMJfztyv1Zkst0iZPLMnpn8+CnHu3wOHS11J5Dr3A== - dependencies: - "@smithy/node-config-provider" "^2.1.8" - "@smithy/property-provider" "^2.0.16" - "@smithy/types" "^2.7.0" - "@smithy/url-parser" "^2.0.15" +"@smithy/core@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.3.1.tgz#ecedc564e68453b02c20db9e8435d59005c066d8" + integrity sha512-tf+NIu9FkOh312b6M9G4D68is4Xr7qptzaZGZUREELF8ysE1yLKphqt7nsomjKZVwW7WE5pDDex9idowNGRQ/Q== + dependencies: + "@smithy/middleware-endpoint" "^2.4.1" + "@smithy/middleware-retry" "^2.1.1" + "@smithy/middleware-serde" "^2.1.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/util-middleware" "^2.1.1" tslib "^2.5.0" -"@smithy/eventstream-codec@^2.0.12": - version "2.0.12" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.0.12.tgz#99fab750d0ac3941f341d912d3c3a1ab985e1a7a" - integrity sha512-ZZQLzHBJkbiAAdj2C5K+lBlYp/XJ+eH2uy+jgJgYIFW/o5AM59Hlj7zyI44/ZTDIQWmBxb3EFv/c5t44V8/g8A== +"@smithy/credential-provider-imds@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.1.tgz#4805bf5e104718b959cf8699113fa9de6ddeeafa" + integrity sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA== dependencies: - "@aws-crypto/crc32" "3.0.0" - "@smithy/types" "^2.4.0" - "@smithy/util-hex-encoding" "^2.0.0" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/property-provider" "^2.1.1" + "@smithy/types" "^2.9.1" + "@smithy/url-parser" "^2.1.1" tslib "^2.5.0" -"@smithy/eventstream-codec@^2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.0.15.tgz#733e638fd38e7e264bc0429dbda139bab950bd25" - integrity sha512-crjvz3j1gGPwA0us6cwS7+5gAn35CTmqu/oIxVbYJo2Qm/sGAye6zGJnMDk3BKhWZw5kcU1G4MxciTkuBpOZPg== +"@smithy/eventstream-codec@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.1.1.tgz#4405ab0f9c77d439c575560c4886e59ee17d6d38" + integrity sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw== dependencies: "@aws-crypto/crc32" "3.0.0" - "@smithy/types" "^2.7.0" - "@smithy/util-hex-encoding" "^2.0.0" + "@smithy/types" "^2.9.1" + "@smithy/util-hex-encoding" "^2.1.1" tslib "^2.5.0" -"@smithy/eventstream-serde-browser@^2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.15.tgz#f62c891e6f8ad59f552a92d8aa14eb6b4541d418" - integrity sha512-WiFG5N9j3jmS5P0z5Xev6dO0c3lf7EJYC2Ncb0xDnWFvShwXNn741AF71ABr5EcZw8F4rQma0362MMjAwJeZog== +"@smithy/eventstream-serde-browser@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.1.1.tgz#743a374639e9e2dd858b6fda1fd814eb6c604946" + integrity sha512-JvEdCmGlZUay5VtlT8/kdR6FlvqTDUiJecMjXsBb0+k1H/qc9ME5n2XKPo8q/MZwEIA1GmGgYMokKGjVvMiDow== dependencies: - "@smithy/eventstream-serde-universal" "^2.0.15" - "@smithy/types" "^2.7.0" + "@smithy/eventstream-serde-universal" "^2.1.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/eventstream-serde-config-resolver@^2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.15.tgz#50e98c59aeb31a0702bad5dfab4009a15fc8b3bf" - integrity sha512-o65d2LRjgCbWYH+VVNlWXtmsI231SO99ZTOL4UuIPa6WTjbSHWtlXvUcJG9libhEKWmEV9DIUiH2IqyPWi7ubA== +"@smithy/eventstream-serde-config-resolver@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.1.1.tgz#0b84d6f8be0836af7b92455c69f7427e4f01e7a2" + integrity sha512-EqNqXYp3+dk//NmW3NAgQr9bEQ7fsu/CcxQmTiq07JlaIcne/CBWpMZETyXm9w5LXkhduBsdXdlMscfDUDn2fA== dependencies: - "@smithy/types" "^2.7.0" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/eventstream-serde-node@^2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.15.tgz#8be1bd024048adcff4ccbb723c55fc42ce582d33" - integrity sha512-9OOXiIhHq1VeOG6xdHkn2ZayfMYM3vzdUTV3zhcCnt+tMqA3BJK3XXTJFRR2BV28rtRM778DzqbBTf+hqwQPTg== +"@smithy/eventstream-serde-node@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.1.1.tgz#2e1afa27f9c7eb524c1c53621049c5e4e3cea6a5" + integrity sha512-LF882q/aFidFNDX7uROAGxq3H0B7rjyPkV6QDn6/KDQ+CG7AFkRccjxRf1xqajq/Pe4bMGGr+VKAaoF6lELIQw== dependencies: - "@smithy/eventstream-serde-universal" "^2.0.15" - "@smithy/types" "^2.7.0" + "@smithy/eventstream-serde-universal" "^2.1.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/eventstream-serde-universal@^2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.15.tgz#85cdff39abc630cb18b4d333913b7120651771ca" - integrity sha512-dP8AQp/pXlWBjvL0TaPBJC3rM0GoYv7O0Uim8d/7UKZ2Wo13bFI3/BhQfY/1DeiP1m23iCHFNFtOQxfQNBB8rQ== +"@smithy/eventstream-serde-universal@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.1.1.tgz#0f5eec9ad033017973a67bafb5549782499488d2" + integrity sha512-LR0mMT+XIYTxk4k2fIxEA1BPtW3685QlqufUEUAX1AJcfFfxNDKEvuCRZbO8ntJb10DrIFVJR9vb0MhDCi0sAQ== dependencies: - "@smithy/eventstream-codec" "^2.0.15" - "@smithy/types" "^2.7.0" + "@smithy/eventstream-codec" "^2.1.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/fetch-http-handler@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.3.1.tgz#aa055db5bf4d78acec97abe6ef24283fa2c18430" - integrity sha512-6MNk16fqb8EwcYY8O8WxB3ArFkLZ2XppsSNo1h7SQcFdDDwIumiJeO6wRzm7iB68xvsOQzsdQKbdtTieS3hfSQ== +"@smithy/fetch-http-handler@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.1.tgz#b4d73bbc1449f61234077d58c705b843a8587bf0" + integrity sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg== dependencies: - "@smithy/protocol-http" "^3.0.11" - "@smithy/querystring-builder" "^2.0.15" - "@smithy/types" "^2.7.0" - "@smithy/util-base64" "^2.0.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/querystring-builder" "^2.1.1" + "@smithy/types" "^2.9.1" + "@smithy/util-base64" "^2.1.1" tslib "^2.5.0" -"@smithy/hash-blob-browser@^2.0.16": - version "2.0.16" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.16.tgz#6cd3686e79f3c8d96a129076073bf20d06293152" - integrity sha512-cSYRi05LA7DZDwjB1HL0BP8B56eUNNeLglVH147QTXFyuXJq/7erAIiLRfsyXB8+GfFHkSS5BHbc76a7k/AYPA== +"@smithy/hash-blob-browser@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.1.1.tgz#f4571d4e2fbc2cc1869c443850e5409bf541ba25" + integrity sha512-jizu1+2PAUjiGIfRtlPEU8Yo6zn+d78ti/ZHDesdf1SUn2BuZW433JlPoCOLH3dBoEEvTgLvQ8tUGSoTTALA+A== dependencies: - "@smithy/chunked-blob-reader" "^2.0.0" - "@smithy/chunked-blob-reader-native" "^2.0.1" - "@smithy/types" "^2.7.0" + "@smithy/chunked-blob-reader" "^2.1.1" + "@smithy/chunked-blob-reader-native" "^2.1.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/hash-node@^2.0.17": - version "2.0.17" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.0.17.tgz#9ce5e3f137143e3658759d31a16e068ef94a14fc" - integrity sha512-Il6WuBcI1nD+e2DM7tTADMf01wEPGK8PAhz4D+YmDUVaoBqlA+CaH2uDJhiySifmuKBZj748IfygXty81znKhw== +"@smithy/hash-node@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.1.1.tgz#0f8a22d97565ca948724f72267e4d3a2f33740a8" + integrity sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg== dependencies: - "@smithy/types" "^2.7.0" - "@smithy/util-buffer-from" "^2.0.0" - "@smithy/util-utf8" "^2.0.2" + "@smithy/types" "^2.9.1" + "@smithy/util-buffer-from" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" tslib "^2.5.0" -"@smithy/hash-stream-node@^2.0.17": - version "2.0.17" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.0.17.tgz#90375ed9c1a586118433c925a61d39b5555bf284" - integrity sha512-ey8DtnATzp1mOXgS7rqMwSmAki6iJA+jgNucKcxRkhMB1rrICfHg+rhmIF50iLPDHUhTcS5pBMOrLzzpZftvNQ== +"@smithy/hash-stream-node@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.1.1.tgz#d1885a3bf159872cbb8c9d9f1aefc596ea6cf5db" + integrity sha512-VgDaKcfCy0iHcmtAZgZ3Yw9g37Gkn2JsQiMtFQXUh8Wmo3GfNgDwLOtdhJ272pOT7DStzpe9cNr+eV5Au8KfQA== dependencies: - "@smithy/types" "^2.7.0" - "@smithy/util-utf8" "^2.0.2" + "@smithy/types" "^2.9.1" + "@smithy/util-utf8" "^2.1.1" tslib "^2.5.0" -"@smithy/invalid-dependency@^2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.0.15.tgz#7653490047bf0ab6042fb812adfbcce857aa2d06" - integrity sha512-dlEKBFFwVfzA5QroHlBS94NpgYjXhwN/bFfun+7w3rgxNvVy79SK0w05iGc7UAeC5t+D7gBxrzdnD6hreZnDVQ== +"@smithy/invalid-dependency@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.1.1.tgz#bd69fa24dd35e9bc65a160bd86becdf1399e4463" + integrity sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw== dependencies: - "@smithy/types" "^2.7.0" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/is-array-buffer@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz#8fa9b8040651e7ba0b2f6106e636a91354ff7d34" - integrity sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug== +"@smithy/is-array-buffer@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz#07b4c77ae67ed58a84400c76edd482271f9f957b" + integrity sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ== dependencies: tslib "^2.5.0" -"@smithy/md5-js@^2.0.17": - version "2.0.17" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.0.17.tgz#784c02da6cee539f5af0e45b1eaf9beb10ed8ad6" - integrity sha512-jmISTCnEkOnm2oCNx/rMkvBT/eQh3aA6nktevkzbmn/VYqYEuc5Z2n5sTTqsciMSO01Lvf56wG1A4twDqovYeQ== +"@smithy/md5-js@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.1.1.tgz#f414982bc6ab275b80ec517d2e44a779c374ff9c" + integrity sha512-L3MbIYBIdLlT+MWTYrdVSv/dow1+6iZ1Ad7xS0OHxTTs17d753ZcpOV4Ro7M7tRAVWML/sg2IAp/zzCb6aAttg== dependencies: - "@smithy/types" "^2.7.0" - "@smithy/util-utf8" "^2.0.2" + "@smithy/types" "^2.9.1" + "@smithy/util-utf8" "^2.1.1" tslib "^2.5.0" -"@smithy/middleware-content-length@^2.0.17": - version "2.0.17" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.0.17.tgz#13479173a15d1cd4224e3e21071a27c66a74b653" - integrity sha512-OyadvMcKC7lFXTNBa8/foEv7jOaqshQZkjWS9coEXPRZnNnihU/Ls+8ZuJwGNCOrN2WxXZFmDWhegbnM4vak8w== +"@smithy/middleware-content-length@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.1.1.tgz#df767de12d594bc5622009fb0fc8343522697d8c" + integrity sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g== dependencies: - "@smithy/protocol-http" "^3.0.11" - "@smithy/types" "^2.7.0" + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/middleware-endpoint@^2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.3.tgz#4069ab6e8d1b485bc0d2384b30f7b37096111ec2" - integrity sha512-nYfxuq0S/xoAjdLbyn1ixeVB6cyH9wYCMtbbOCpcCRYR5u2mMtqUtVjjPAZ/DIdlK3qe0tpB0Q76szFGNuz+kQ== - dependencies: - "@smithy/middleware-serde" "^2.0.15" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/shared-ini-file-loader" "^2.2.7" - "@smithy/types" "^2.7.0" - "@smithy/url-parser" "^2.0.15" - "@smithy/util-middleware" "^2.0.8" +"@smithy/middleware-endpoint@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.1.tgz#9e500df4d944741808e92018ccd2e948b598a49f" + integrity sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q== + dependencies: + "@smithy/middleware-serde" "^2.1.1" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/url-parser" "^2.1.1" + "@smithy/util-middleware" "^2.1.1" tslib "^2.5.0" -"@smithy/middleware-retry@^2.0.25": - version "2.0.25" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.0.25.tgz#ae948f4a1ad5968bc315f07df930a55c09ffe040" - integrity sha512-FXhafCPvx/9L9OgHJ3cdo/pD1f7ngC7DKsjDV2J7k6LO/Yl69POoBLk4sI1OZPUGc4dfxriENlTma9Nj1hI+IQ== - dependencies: - "@smithy/node-config-provider" "^2.1.8" - "@smithy/protocol-http" "^3.0.11" - "@smithy/service-error-classification" "^2.0.8" - "@smithy/smithy-client" "^2.2.0" - "@smithy/types" "^2.7.0" - "@smithy/util-middleware" "^2.0.8" - "@smithy/util-retry" "^2.0.8" +"@smithy/middleware-retry@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.1.1.tgz#ddc749dd927f136714f76ca5a52dcfb0993ee162" + integrity sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA== + dependencies: + "@smithy/node-config-provider" "^2.2.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/service-error-classification" "^2.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/util-middleware" "^2.1.1" + "@smithy/util-retry" "^2.1.1" tslib "^2.5.0" uuid "^8.3.2" -"@smithy/middleware-serde@^2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.0.15.tgz#9deac4daad1f2a60d5c4e7097658f9ae2eb0a33f" - integrity sha512-FOZRFk/zN4AT4wzGuBY+39XWe+ZnCFd0gZtyw3f9Okn2CJPixl9GyWe98TIaljeZdqWkgrzGyPre20AcW2UMHQ== - dependencies: - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@smithy/middleware-stack@^2.0.9": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.0.9.tgz#60e51697c74258fac087bc739d940f524921a15f" - integrity sha512-bCB5dUtGQ5wh7QNL2ELxmDc6g7ih7jWU3Kx6MYH1h4mZbv9xL3WyhKHojRltThCB1arLPyTUFDi+x6fB/oabtA== +"@smithy/middleware-serde@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.1.1.tgz#2c5750f76e276a5249720f6c3c24fac29abbee16" + integrity sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g== dependencies: - "@smithy/types" "^2.7.0" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/node-config-provider@^2.1.3", "@smithy/node-config-provider@^2.1.8": - version "2.1.8" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.1.8.tgz#8cab8f1172c8cd1146e7997292786909abcae763" - integrity sha512-+w26OKakaBUGp+UG+dxYZtFb5fs3tgHg3/QrRrmUZj+rl3cIuw840vFUXX35cVPTUCQIiTqmz7CpVF7+hdINdQ== +"@smithy/middleware-stack@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.1.1.tgz#67f992dc36e8a6861f881f80a81c1c30956a0396" + integrity sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw== dependencies: - "@smithy/property-provider" "^2.0.16" - "@smithy/shared-ini-file-loader" "^2.2.7" - "@smithy/types" "^2.7.0" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/node-http-handler@^2.2.1": +"@smithy/node-config-provider@^2.2.1": version "2.2.1" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.2.1.tgz#23f6540e565edcae8c558a854fffde3d003451c0" - integrity sha512-8iAKQrC8+VFHPAT8pg4/j6hlsTQh+NKOWlctJBrYtQa4ExcxX7aSg3vdQ2XLoYwJotFUurg/NLqFCmZaPRrogw== + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.2.1.tgz#c440c7948d58d72f0e212aa1967aa12f0729defd" + integrity sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg== dependencies: - "@smithy/abort-controller" "^2.0.15" - "@smithy/protocol-http" "^3.0.11" - "@smithy/querystring-builder" "^2.0.15" - "@smithy/types" "^2.7.0" + "@smithy/property-provider" "^2.1.1" + "@smithy/shared-ini-file-loader" "^2.3.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/property-provider@^2.0.0", "@smithy/property-provider@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.0.13.tgz#45ee47ad79d638082523f944c49fd2e851312098" - integrity sha512-VJqUf2CbsQX6uUiC5dUPuoEATuFjkbkW3lJHbRnpk9EDC9X+iKqhfTK+WP+lve5EQ9TcCI1Q6R7hrg41FyC54w== +"@smithy/node-http-handler@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.3.1.tgz#77d23279ff0a12cbe7cde93c5e7c0e86ad56dd20" + integrity sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA== dependencies: - "@smithy/types" "^2.4.0" + "@smithy/abort-controller" "^2.1.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/querystring-builder" "^2.1.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/property-provider@^2.0.16": - version "2.0.16" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.0.16.tgz#0c15ea8a3e8c8e7012bf5877c79ce754f7d2c06e" - integrity sha512-28Ky0LlOqtEjwg5CdHmwwaDRHcTWfPRzkT6HrhwOSRS2RryAvuDfJrZpM+BMcrdeCyEg1mbcgIMoqTla+rdL8Q== +"@smithy/property-provider@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.1.1.tgz#0f7ffc5e43829eaca5b2b5aae8554807a52b30f3" + integrity sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw== dependencies: - "@smithy/types" "^2.7.0" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/protocol-http@^3.0.11": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.0.11.tgz#a9ea712fe7cc3375378ac68d9168a7b6cd0b6f65" - integrity sha512-3ziB8fHuXIRamV/akp/sqiWmNPR6X+9SB8Xxnozzj+Nq7hSpyKdFHd1FLpBkgfGFUTzzcBJQlDZPSyxzmdcx5A== +"@smithy/protocol-http@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.1.1.tgz#eee522d0ed964a72b735d64925e07bcfb7a7806f" + integrity sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ== dependencies: - "@smithy/types" "^2.7.0" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/querystring-builder@^2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.0.15.tgz#aa8c889bcaef274b8345be4ddabae3bfedf2cf33" - integrity sha512-e1q85aT6HutvouOdN+dMsN0jcdshp50PSCvxDvo6aIM57LqeXimjfONUEgfqQ4IFpYWAtVixptyIRE5frMp/2A== +"@smithy/querystring-builder@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.1.1.tgz#b9693448ad3f8e0767d84cf5cae29f35514591fb" + integrity sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg== dependencies: - "@smithy/types" "^2.7.0" - "@smithy/util-uri-escape" "^2.0.0" + "@smithy/types" "^2.9.1" + "@smithy/util-uri-escape" "^2.1.1" tslib "^2.5.0" -"@smithy/querystring-parser@^2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.0.15.tgz#46c8806a145f46636e4aee2a5d79e7ba68161a4c" - integrity sha512-jbBvoK3cc81Cj1c1TH1qMYxNQKHrYQ2DoTntN9FBbtUWcGhc+T4FP6kCKYwRLXyU4AajwGIZstvNAmIEgUUNTQ== +"@smithy/querystring-parser@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.1.1.tgz#a4282a66cc56844317dbff824e573f469bbfc032" + integrity sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ== dependencies: - "@smithy/types" "^2.7.0" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/service-error-classification@^2.0.8": - version "2.0.8" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.0.8.tgz#c9e421312a2def84da025c5efe6de06679c5be95" - integrity sha512-jCw9+005im8tsfYvwwSc4TTvd29kXRFkH9peQBg5R/4DD03ieGm6v6Hpv9nIAh98GwgYg1KrztcINC1s4o7/hg== - dependencies: - "@smithy/types" "^2.7.0" - -"@smithy/shared-ini-file-loader@^2.0.6": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.2.tgz#b52064c5254a01f5c98a821207448de439938667" - integrity sha512-noyQUPn7b1M8uB0GEXc/Zyxq+5K2b7aaqWnLp+hgJ7+xu/FCvtyWy5eWLDjQEsHnAet2IZhS5QF8872OR69uNg== +"@smithy/service-error-classification@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.1.tgz#dd24e1ec529ae9ec8e87d8b15f0fc8f7e17f3d02" + integrity sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw== dependencies: - "@smithy/types" "^2.4.0" - tslib "^2.5.0" + "@smithy/types" "^2.9.1" -"@smithy/shared-ini-file-loader@^2.2.7": - version "2.2.7" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.7.tgz#4a3bd469703d02c3cc8e36dcba2238c06efa12cb" - integrity sha512-0Qt5CuiogIuvQIfK+be7oVHcPsayLgfLJGkPlbgdbl0lD28nUKu4p11L+UG3SAEsqc9UsazO+nErPXw7+IgDpQ== +"@smithy/shared-ini-file-loader@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.1.tgz#a2e28b4d85f8a8262a84403fa2b74a086b3a7703" + integrity sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw== dependencies: - "@smithy/types" "^2.7.0" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/signature-v4@^2.0.0": - version "2.0.12" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.0.12.tgz#4f9f5bba25e784d110fdc4a276b715feae82bb28" - integrity sha512-6Kc2lCZEVmb1nNYngyNbWpq0d82OZwITH11SW/Q0U6PX5fH7B2cIcFe7o6eGEFPkTZTP8itTzmYiGcECL0D0Lw== - dependencies: - "@smithy/eventstream-codec" "^2.0.12" - "@smithy/is-array-buffer" "^2.0.0" - "@smithy/types" "^2.4.0" - "@smithy/util-hex-encoding" "^2.0.0" - "@smithy/util-middleware" "^2.0.5" - "@smithy/util-uri-escape" "^2.0.0" - "@smithy/util-utf8" "^2.0.0" +"@smithy/signature-v4@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.1.1.tgz#6080171e3d694f40d3f553bbc236c5c433efd4d2" + integrity sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg== + dependencies: + "@smithy/eventstream-codec" "^2.1.1" + "@smithy/is-array-buffer" "^2.1.1" + "@smithy/types" "^2.9.1" + "@smithy/util-hex-encoding" "^2.1.1" + "@smithy/util-middleware" "^2.1.1" + "@smithy/util-uri-escape" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" tslib "^2.5.0" -"@smithy/smithy-client@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.2.0.tgz#9865981a2f49dd0e9ef68193aebcd5654cdd7f00" - integrity sha512-C/bkNue5H5Obgl83SnlBt4v6VM68CqIjIELh3vAabud87xFYznLNKtj6Qb69Z+QOnLp9T+We++sEem/f2AHE+Q== - dependencies: - "@smithy/middleware-endpoint" "^2.2.3" - "@smithy/middleware-stack" "^2.0.9" - "@smithy/protocol-http" "^3.0.11" - "@smithy/types" "^2.7.0" - "@smithy/util-stream" "^2.0.23" +"@smithy/smithy-client@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.3.1.tgz#0c3a4a0d3935c7ad2240cc23181f276705212b1f" + integrity sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA== + dependencies: + "@smithy/middleware-endpoint" "^2.4.1" + "@smithy/middleware-stack" "^2.1.1" + "@smithy/protocol-http" "^3.1.1" + "@smithy/types" "^2.9.1" + "@smithy/util-stream" "^2.1.1" tslib "^2.5.0" "@smithy/types@^1.1.0": @@ -3559,230 +3535,222 @@ dependencies: tslib "^2.5.0" -"@smithy/types@^2.4.0", "@smithy/types@^2.7.0": - version "2.7.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.7.0.tgz#6ed9ba5bff7c4d28c980cff967e6d8456840a4f3" - integrity sha512-1OIFyhK+vOkMbu4aN2HZz/MomREkrAC/HqY5mlJMUJfGrPRwijJDTeiN8Rnj9zUaB8ogXAfIOtZrrgqZ4w7Wnw== +"@smithy/types@^2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.9.1.tgz#ed04d4144eed3b8bd26d20fc85aae8d6e357ebb9" + integrity sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw== dependencies: tslib "^2.5.0" -"@smithy/url-parser@^2.0.12", "@smithy/url-parser@^2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.0.15.tgz#878d9b61f9eac8834cb611cf1a8a0e5d9a48038c" - integrity sha512-sADUncUj9rNbOTrdDGm4EXlUs0eQ9dyEo+V74PJoULY4jSQxS+9gwEgsPYyiu8PUOv16JC/MpHonOgqP/IEDZA== +"@smithy/url-parser@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.1.1.tgz#a30de227b6734650d740b6dff74d488b874e85e3" + integrity sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q== dependencies: - "@smithy/querystring-parser" "^2.0.15" - "@smithy/types" "^2.7.0" + "@smithy/querystring-parser" "^2.1.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/util-base64@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.0.1.tgz#57f782dafc187eddea7c8a1ff2a7c188ed1a02c4" - integrity sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ== +"@smithy/util-base64@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.1.1.tgz#af729085cc9d92ebd54a5d2c5d0aa5a0c31f83bf" + integrity sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g== dependencies: - "@smithy/util-buffer-from" "^2.0.0" + "@smithy/util-buffer-from" "^2.1.1" tslib "^2.5.0" -"@smithy/util-body-length-browser@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.1.tgz#424485cc81c640d18c17c683e0e6edb57e8e2ab9" - integrity sha512-NXYp3ttgUlwkaug4bjBzJ5+yIbUbUx8VsSLuHZROQpoik+gRkIBeEG9MPVYfvPNpuXb/puqodeeUXcKFe7BLOQ== +"@smithy/util-body-length-browser@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz#1fc77072768013ae646415eedb9833cd252d055d" + integrity sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag== dependencies: tslib "^2.5.0" -"@smithy/util-body-length-node@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz#313a5f7c5017947baf5fa018bfc22628904bbcfa" - integrity sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw== +"@smithy/util-body-length-node@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz#a6f5c9911f1c3e23efb340d5ce7a590b62f2056e" + integrity sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg== dependencies: tslib "^2.5.0" -"@smithy/util-buffer-from@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz#7eb75d72288b6b3001bc5f75b48b711513091deb" - integrity sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw== +"@smithy/util-buffer-from@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz#f9346bf8b23c5ba6f6bdb61dd9db779441ba8d08" + integrity sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg== dependencies: - "@smithy/is-array-buffer" "^2.0.0" + "@smithy/is-array-buffer" "^2.1.1" tslib "^2.5.0" -"@smithy/util-config-provider@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.1.0.tgz#c733a862892772aaeb373a3e8af5182556da0ef9" - integrity sha512-S6V0JvvhQgFSGLcJeT1CBsaTR03MM8qTuxMH9WPCCddlSo2W0V5jIHimHtIQALMLEDPGQ0ROSRr/dU0O+mxiQg== +"@smithy/util-config-provider@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz#aea0a80236d6cedaee60473802899cff4a8cc0ba" + integrity sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw== dependencies: tslib "^2.5.0" -"@smithy/util-defaults-mode-browser@^2.0.23": - version "2.0.23" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.23.tgz#27bce42b7a55974ed4aff5b2b870256ce383613a" - integrity sha512-2u+7t7Wgz1jlfsf6il3pz6DIzyJHS3qrnNnmATICm00pQeqp2D4kUOYauOgKGIeKgVpwzzq8+hFQe749r3xR5w== +"@smithy/util-defaults-mode-browser@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.1.tgz#be9ac82acee6ec4821b610e7187b0e147f0ba8ff" + integrity sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA== dependencies: - "@smithy/property-provider" "^2.0.16" - "@smithy/smithy-client" "^2.2.0" - "@smithy/types" "^2.7.0" + "@smithy/property-provider" "^2.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" bowser "^2.11.0" tslib "^2.5.0" -"@smithy/util-defaults-mode-node@^2.0.31": - version "2.0.31" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.31.tgz#1b7dc36f695375cead8e8fa7de5e90c8bfcd0df8" - integrity sha512-ZwdjAJAFkkQQ4hdE8HOcxFAWC3GPFXQ3yQ8IBwHH5nQBlr9q+p5eRQ7Y8iRRORJe4vksR+NASRXZ+E81Us1aXQ== - dependencies: - "@smithy/config-resolver" "^2.0.22" - "@smithy/credential-provider-imds" "^2.1.4" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/property-provider" "^2.0.16" - "@smithy/smithy-client" "^2.2.0" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@smithy/util-endpoints@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.0.7.tgz#5a258ac7838dea085660060b515cd2d19f19a4bc" - integrity sha512-Q2gEind3jxoLk6hdKWyESMU7LnXz8aamVwM+VeVjOYzYT1PalGlY/ETa48hv2YpV4+YV604y93YngyzzzQ4IIA== - dependencies: - "@smithy/node-config-provider" "^2.1.8" - "@smithy/types" "^2.7.0" +"@smithy/util-defaults-mode-node@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.1.1.tgz#0910ee00aac3e8a08aac3e6ae8794e52f3efef02" + integrity sha512-tYVrc+w+jSBfBd267KDnvSGOh4NMz+wVH7v4CClDbkdPfnjvImBZsOURncT5jsFwR9KCuDyPoSZq4Pa6+eCUrA== + dependencies: + "@smithy/config-resolver" "^2.1.1" + "@smithy/credential-provider-imds" "^2.2.1" + "@smithy/node-config-provider" "^2.2.1" + "@smithy/property-provider" "^2.1.1" + "@smithy/smithy-client" "^2.3.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/util-hex-encoding@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz#0aa3515acd2b005c6d55675e377080a7c513b59e" - integrity sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA== +"@smithy/util-endpoints@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.1.1.tgz#45426dba6fb42282a0ad955600b2b3ba050d118f" + integrity sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw== dependencies: + "@smithy/node-config-provider" "^2.2.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/util-middleware@^2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.0.5.tgz#c63dc491de81641c99ade9309f30c54ad0e28fbd" - integrity sha512-1lyT3TcaMJQe+OFfVI+TlomDkPuVzb27NZYdYtmSTltVmLaUjdCyt4KE+OH1CnhZKsz4/cdCL420Lg9UH5Z2Mw== +"@smithy/util-hex-encoding@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz#978252b9fb242e0a59bae4ead491210688e0d15f" + integrity sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg== dependencies: - "@smithy/types" "^2.4.0" tslib "^2.5.0" -"@smithy/util-middleware@^2.0.8": - version "2.0.8" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.0.8.tgz#2ec1da1190d09b69512ce0248ebd5e819e3c8a92" - integrity sha512-qkvqQjM8fRGGA8P2ydWylMhenCDP8VlkPn8kiNuFEaFz9xnUKC2irfqsBSJrfrOB9Qt6pQsI58r3zvvumhFMkw== +"@smithy/util-middleware@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.1.1.tgz#903ba19bb17704f4b476fb9ade9bf9eb0174bc3d" + integrity sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA== dependencies: - "@smithy/types" "^2.7.0" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/util-retry@^2.0.8": - version "2.0.8" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.0.8.tgz#61f8db11e4fe60975cb9fb2eada173f5024a06f3" - integrity sha512-cQTPnVaVFMjjS6cb44WV2yXtHVyXDC5icKyIbejMarJEApYeJWpBU3LINTxHqp/tyLI+MZOUdosr2mZ3sdziNg== +"@smithy/util-retry@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.1.1.tgz#f2d3566b6e5b841028c7240c852007d4037e49b2" + integrity sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA== dependencies: - "@smithy/service-error-classification" "^2.0.8" - "@smithy/types" "^2.7.0" + "@smithy/service-error-classification" "^2.1.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@smithy/util-stream@^2.0.23": - version "2.0.23" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.0.23.tgz#468ad29913d091092317cfea2d8ac5b866326a07" - integrity sha512-OJMWq99LAZJUzUwTk+00plyxX3ESktBaGPhqNIEVab+53gLULiWN9B/8bRABLg0K6R6Xg4t80uRdhk3B/LZqMQ== - dependencies: - "@smithy/fetch-http-handler" "^2.3.1" - "@smithy/node-http-handler" "^2.2.1" - "@smithy/types" "^2.7.0" - "@smithy/util-base64" "^2.0.1" - "@smithy/util-buffer-from" "^2.0.0" - "@smithy/util-hex-encoding" "^2.0.0" - "@smithy/util-utf8" "^2.0.2" +"@smithy/util-stream@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.1.1.tgz#3ae0e88c3a1a45899e29c1655d2e5a3865b6c0a6" + integrity sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ== + dependencies: + "@smithy/fetch-http-handler" "^2.4.1" + "@smithy/node-http-handler" "^2.3.1" + "@smithy/types" "^2.9.1" + "@smithy/util-base64" "^2.1.1" + "@smithy/util-buffer-from" "^2.1.1" + "@smithy/util-hex-encoding" "^2.1.1" + "@smithy/util-utf8" "^2.1.1" tslib "^2.5.0" -"@smithy/util-uri-escape@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz#19955b1a0f517a87ae77ac729e0e411963dfda95" - integrity sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw== +"@smithy/util-uri-escape@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz#7eedc93b73ecda68f12fb9cf92e9fa0fbbed4d83" + integrity sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw== dependencies: tslib "^2.5.0" -"@smithy/util-utf8@^2.0.0", "@smithy/util-utf8@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.0.2.tgz#626b3e173ad137208e27ed329d6bea70f4a1a7f7" - integrity sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA== +"@smithy/util-utf8@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.1.1.tgz#690018dd28f47f014114497735e51417ea5900a6" + integrity sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A== dependencies: - "@smithy/util-buffer-from" "^2.0.0" + "@smithy/util-buffer-from" "^2.1.1" tslib "^2.5.0" -"@smithy/util-waiter@^2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.0.15.tgz#b02a42bf1b82f07973d1756a0ee10fafa1fbf58e" - integrity sha512-9Y+btzzB7MhLADW7xgD6SjvmoYaRkrb/9SCbNGmNdfO47v38rxb90IGXyDtAK0Shl9bMthTmLgjlfYc+vtz2Qw== +"@smithy/util-waiter@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.1.1.tgz#292d4d09cda7df38aba6ea2abd7d948e3f11bf2d" + integrity sha512-kYy6BLJJNif+uqNENtJqWdXcpqo1LS+nj1AfXcDhOpqpSHJSAkVySLyZV9fkmuVO21lzGoxjvd1imGGJHph/IA== dependencies: - "@smithy/abort-controller" "^2.0.15" - "@smithy/types" "^2.7.0" + "@smithy/abort-controller" "^2.1.1" + "@smithy/types" "^2.9.1" tslib "^2.5.0" -"@swc/core-darwin-arm64@1.3.101": - version "1.3.101" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.101.tgz#9ffdc0e77c31b20877fa7405c82905e0c76738d0" - integrity sha512-mNFK+uHNPRXSnfTOG34zJOeMl2waM4hF4a2NY7dkMXrPqw9CoJn4MwTXJcyMiSz1/BnNjjTCHF3Yhj0jPxmkzQ== - -"@swc/core-darwin-x64@1.3.101": - version "1.3.101" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.101.tgz#e50130e21e3cfd3029fd6cea43e8309b58ad9fa6" - integrity sha512-B085j8XOx73Fg15KsHvzYWG262bRweGr3JooO1aW5ec5pYbz5Ew9VS5JKYS03w2UBSxf2maWdbPz2UFAxg0whw== - -"@swc/core-linux-arm-gnueabihf@1.3.101": - version "1.3.101" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.101.tgz#8cd36328e794b3c42b6c8e578bb1f42e59ba0231" - integrity sha512-9xLKRb6zSzRGPqdz52Hy5GuB1lSjmLqa0lST6MTFads3apmx4Vgs8Y5NuGhx/h2I8QM4jXdLbpqQlifpzTlSSw== - -"@swc/core-linux-arm64-gnu@1.3.101": - version "1.3.101" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.101.tgz#d15e3885eb13a1512ba62f00ce4f5bb19f710a0c" - integrity sha512-oE+r1lo7g/vs96Weh2R5l971dt+ZLuhaUX+n3BfDdPxNHfObXgKMjO7E+QS5RbGjv/AwiPCxQmbdCp/xN5ICJA== - -"@swc/core-linux-arm64-musl@1.3.101": - version "1.3.101" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.101.tgz#851d4cc1079b091fee36f5f64335232210749d7a" - integrity sha512-OGjYG3H4BMOTnJWJyBIovCez6KiHF30zMIu4+lGJTCrxRI2fAjGLml3PEXj8tC3FMcud7U2WUn6TdG0/te2k6g== - -"@swc/core-linux-x64-gnu@1.3.101": - version "1.3.101" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.101.tgz#3a2a7c584db2e05a798e28361440424914563fa3" - integrity sha512-/kBMcoF12PRO/lwa8Z7w4YyiKDcXQEiLvM+S3G9EvkoKYGgkkz4Q6PSNhF5rwg/E3+Hq5/9D2R+6nrkF287ihg== - -"@swc/core-linux-x64-musl@1.3.101": - version "1.3.101" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.101.tgz#45d1d53945994f08e93703b8de24ccac88538d0c" - integrity sha512-kDN8lm4Eew0u1p+h1l3JzoeGgZPQ05qDE0czngnjmfpsH2sOZxVj1hdiCwS5lArpy7ktaLu5JdRnx70MkUzhXw== - -"@swc/core-win32-arm64-msvc@1.3.101": - version "1.3.101" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.101.tgz#b2610b8354e5fbca7cc5be3f728e61b046227fa8" - integrity sha512-9Wn8TTLWwJKw63K/S+jjrZb9yoJfJwCE2RV5vPCCWmlMf3U1AXj5XuWOLUX+Rp2sGKau7wZKsvywhheWm+qndQ== - -"@swc/core-win32-ia32-msvc@1.3.101": - version "1.3.101" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.101.tgz#c919175bb4cd5e9fcfa56fbd3708167c1d445c68" - integrity sha512-onO5KvICRVlu2xmr4//V2je9O2XgS1SGKpbX206KmmjcJhXN5EYLSxW9qgg+kgV5mip+sKTHTAu7IkzkAtElYA== - -"@swc/core-win32-x64-msvc@1.3.101": - version "1.3.101" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.101.tgz#17743fe425caffc596fde5965c9c4cf9a48aa26a" - integrity sha512-T3GeJtNQV00YmiVw/88/nxJ/H43CJvFnpvBHCVn17xbahiVUOPOduh3rc9LgAkKiNt/aV8vU3OJR+6PhfMR7UQ== +"@swc/core-darwin-arm64@1.3.105": + version "1.3.105" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.105.tgz#2960f8a87aed01b3850d5c37f05b51d9d3747141" + integrity sha512-buWeweLVDXXmcnfIemH4PGnpjwsDTUGitnPchdftb0u1FU8zSSP/lw/pUCBDG/XvWAp7c/aFxgN4CyG0j7eayA== + +"@swc/core-darwin-x64@1.3.105": + version "1.3.105" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.105.tgz#aaa502f902dec1e4735a0a37a4fcc3a2c0369882" + integrity sha512-hFmXPApqjA/8sy/9NpljHVaKi1OvL9QkJ2MbbTCCbJERuHMpMUeMBUWipHRfepGHFhU+9B9zkEup/qJaJR4XIg== + +"@swc/core-linux-arm-gnueabihf@1.3.105": + version "1.3.105" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.105.tgz#5a8629c75db4fe298ca3fdb18ecbc7888cd34759" + integrity sha512-mwXyMC41oMKkKrPpL8uJpOxw7fyfQoVtIw3Y5p0Blabk+espNYqix0E8VymHdRKuLmM//z5wVmMsuHdGBHvZeg== + +"@swc/core-linux-arm64-gnu@1.3.105": + version "1.3.105" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.105.tgz#9cae768a92944774511a569dffca45f1beab7cdd" + integrity sha512-H7yEIVydnUtqBSUxwmO6vpIQn7j+Rr0DF6ZOORPyd/SFzQJK9cJRtmJQ3ZMzlJ1Bb+1gr3MvjgLEnmyCYEm2Hg== + +"@swc/core-linux-arm64-musl@1.3.105": + version "1.3.105" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.105.tgz#9244aabe4a7884d3d81df707d3e3c3478953a454" + integrity sha512-Jg7RTFT3pGFdGt5elPV6oDkinRy7q9cXpenjXnJnM2uvx3jOwnsAhexPyCDHom8SHL0j+9kaLLC66T3Gz1E4UA== + +"@swc/core-linux-x64-gnu@1.3.105": + version "1.3.105" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.105.tgz#7fde7b8a2ab7f5152e2dc37abf95f9add2c46937" + integrity sha512-DJghplpyusAmp1X5pW/y93MmS/u83Sx5GrpJxI6KLPa82+NItTgMcl8KBQmW5GYAJpVKZyaIvBanS5TdR8aN2w== + +"@swc/core-linux-x64-musl@1.3.105": + version "1.3.105" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.105.tgz#a8d96fc532427f353696283c70ae13e7fcc18358" + integrity sha512-wD5jL2dZH/5nPNssBo6jhOvkI0lmWnVR4vnOXWjuXgjq1S0AJpO5jdre/6pYLmf26hft3M42bteDnjR4AAZ38w== + +"@swc/core-win32-arm64-msvc@1.3.105": + version "1.3.105" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.105.tgz#35edc1d898d7e9994fd6986b4c0085b3f1d59ec5" + integrity sha512-UqJtwILUHRw2+3UTPnRkZrzM/bGdQtbR4UFdp79mZQYfryeOUVNg7aJj/bWUTkKtLiZ3o+FBNrM/x2X1mJX5bA== + +"@swc/core-win32-ia32-msvc@1.3.105": + version "1.3.105" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.105.tgz#5e538fd63b648d8c5bf9c22371c5e273c208f961" + integrity sha512-Z95C6vZgBEJ1snidYyjVKnVWiy/ZpPiIFIXGWkDr4ZyBgL3eZX12M6LzZ+NApHKffrbO4enbFyFomueBQgS2oA== + +"@swc/core-win32-x64-msvc@1.3.105": + version "1.3.105" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.105.tgz#efd50adf2fdc1b9e5ad4df0e165d48d71ea5d7f3" + integrity sha512-3J8fkyDPFsS3mszuYUY4Wfk7/B2oio9qXUwF3DzOs2MK+XgdyMLIptIxL7gdfitXJBH8k39uVjrIw1JGJDjyFA== "@swc/core@^1.3.100": - version "1.3.101" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.101.tgz#4e8f1583094a73c410e48a0bebdeccdc6c66d4a5" - integrity sha512-w5aQ9qYsd/IYmXADAnkXPGDMTqkQalIi+kfFf/MHRKTpaOL7DHjMXwPp/n8hJ0qNjRvchzmPtOqtPBiER50d8A== + version "1.3.105" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.105.tgz#2b78db067b2dc90f3f398a08bb649a3d2ad74e8e" + integrity sha512-me2VZyr3OjqRpFrYQJJYy7x/zbFSl9nt+MAGnIcBtjDsN00iTVqEaKxBjPBFQV9BDAgPz2SRWes/DhhVm5SmMw== dependencies: "@swc/counter" "^0.1.1" "@swc/types" "^0.1.5" optionalDependencies: - "@swc/core-darwin-arm64" "1.3.101" - "@swc/core-darwin-x64" "1.3.101" - "@swc/core-linux-arm-gnueabihf" "1.3.101" - "@swc/core-linux-arm64-gnu" "1.3.101" - "@swc/core-linux-arm64-musl" "1.3.101" - "@swc/core-linux-x64-gnu" "1.3.101" - "@swc/core-linux-x64-musl" "1.3.101" - "@swc/core-win32-arm64-msvc" "1.3.101" - "@swc/core-win32-ia32-msvc" "1.3.101" - "@swc/core-win32-x64-msvc" "1.3.101" + "@swc/core-darwin-arm64" "1.3.105" + "@swc/core-darwin-x64" "1.3.105" + "@swc/core-linux-arm-gnueabihf" "1.3.105" + "@swc/core-linux-arm64-gnu" "1.3.105" + "@swc/core-linux-arm64-musl" "1.3.105" + "@swc/core-linux-x64-gnu" "1.3.105" + "@swc/core-linux-x64-musl" "1.3.105" + "@swc/core-win32-arm64-msvc" "1.3.105" + "@swc/core-win32-ia32-msvc" "1.3.105" + "@swc/core-win32-x64-msvc" "1.3.105" "@swc/counter@^0.1.1": version "0.1.2" @@ -4108,17 +4076,17 @@ "@types/node" "*" "@types/node-fetch@^2.6.3": - version "2.6.10" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.10.tgz#ff5c1ceacab782f2b7ce69957d38c1c27b0dc469" - integrity sha512-PPpPK6F9ALFTn59Ka3BaL+qGuipRfxNE8qVgkp0bVixeiR2c2/L+IVOiBdu9JhhT22sWnQEp6YyHGI2b2+CMcA== + version "2.6.11" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" + integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== dependencies: "@types/node" "*" form-data "^4.0.0" "@types/node-forge@^1.3.1": - version "1.3.10" - resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.10.tgz#62a19d4f75a8b03290578c2b04f294b1a5a71b07" - integrity sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw== + version "1.3.11" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" + integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== dependencies: "@types/node" "*" @@ -4130,9 +4098,9 @@ undici-types "~5.26.4" "@types/node@18", "@types/node@^18.11.17", "@types/node@^18.11.18": - version "18.19.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.4.tgz#89672e84f11a2c19543d694dac00ab8d7bc20ddb" - integrity sha512-xNzlUhzoHotIsnFoXmJB+yWmBvFZgKCI9TtPIEdYIMM1KWfwuY8zh7wvc1u1OAXlC7dlf6mZVx/s+Y5KfFz19A== + version "18.19.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.8.tgz#c1e42b165e5a526caf1f010747e0522cb2c9c36a" + integrity sha512-g1pZtPhsvGVTwmeVoexWZLTQaOvXwoSq//pTL0DHeNzUDrFnir4fgETdhjhIxjVnN+hKOuh98+E1eMLnUXstFg== dependencies: undici-types "~5.26.4" @@ -4969,22 +4937,6 @@ avvio@^8.2.1: debug "^4.0.0" fastq "^1.6.1" -aws-sdk@^2.1231.0: - version "2.1325.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1325.0.tgz#4529ede089ee8db79d6eb04ab46a211bfddbbe5b" - integrity sha512-ztg9HG5aoUHTprY+/eqjqb25E4joCgz+8ToxsP4OSKFQCtaBcF6my03j4e/J2j3fmpPifJnZSPMu4kV7DBj8WA== - dependencies: - buffer "4.9.2" - events "1.1.1" - ieee754 "1.1.13" - jmespath "0.16.0" - querystring "0.2.0" - sax "1.2.1" - url "0.10.3" - util "^0.12.4" - uuid "8.0.0" - xml2js "0.4.19" - aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -5086,7 +5038,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.0.2, base64-js@^1.3.0, base64-js@^1.3.1: +base64-js@^1.3.0, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -5214,15 +5166,6 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -5448,7 +5391,7 @@ chalk@4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@4.1.2, chalk@^4, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: +chalk@4.1.2, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -6173,11 +6116,6 @@ detect-indent@^5.0.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== -detect-libc@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" - integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== - detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -6995,11 +6933,6 @@ eventemitter3@^5.0.1: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== -events@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== - events@^3.0.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -7055,11 +6988,6 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - expect@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" @@ -7431,29 +7359,12 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -from2@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^11.1.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^11.1.1: +fs-extra@^11.1.0, fs-extra@^11.1.1: version "11.2.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== @@ -7471,7 +7382,7 @@ fs-extra@^8.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.0, fs-extra@^9.1.0: +fs-extra@^9.0.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -7760,11 +7671,6 @@ gitconfiglocal@^1.0.0: dependencies: ini "^1.3.2" -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - github-slugger@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" @@ -7907,9 +7813,9 @@ google-auth-library@^9.0.0: lru-cache "^6.0.0" google-gax@^4.0.3, google-gax@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-4.0.5.tgz#e30a2f2fad3716e8b23996f1bbe941e16abf0889" - integrity sha512-yLoYtp4zE+8OQA74oBEbNkbzI6c95W01JSL7RqC8XERKpRvj3ytZp1dgnbA6G9aRsc8pZB25xWYBcCmrbYOEhA== + version "4.1.0" + resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-4.1.0.tgz#f357032fbc7644a22b7ea6cddb7f46e638d57761" + integrity sha512-VP5MYsIXEoXmdeHZl1Qsjv89PvE+LT8fw/2jxpFQtFed22YYAHgiTUuMfj2RWlGJUmRaYEMxBRBDWj+q/hOGQg== dependencies: "@grpc/grpc-js" "~1.9.6" "@grpc/proto-loader" "^0.7.0" @@ -7954,16 +7860,11 @@ got@^11: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@4.2.11, graceful-fs@^4.1.11: +graceful-fs@4.2.11, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" 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== -graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" @@ -8256,12 +8157,7 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ieee754@1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - -ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -8343,7 +8239,7 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.2, ini@^1.3.8, ini@~1.3.0: +ini@^1.3.2, ini@^1.3.8: version "1.3.8" resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== @@ -8406,14 +8302,6 @@ interpret@^1.0.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -into-stream@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-6.0.0.tgz#4bfc1244c0128224e18b8870e85b2de8e66c6702" - integrity sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA== - dependencies: - from2 "^2.3.0" - p-is-promise "^3.0.0" - ip@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" @@ -8424,14 +8312,6 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" @@ -8492,13 +8372,6 @@ is-ci@3.0.1: dependencies: ci-info "^3.2.0" -is-core-module@2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" - integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== - dependencies: - has "^1.0.3" - is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: version "2.13.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" @@ -8552,7 +8425,7 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-generator-function@^1.0.10, is-generator-function@^1.0.7: +is-generator-function@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== @@ -8705,7 +8578,7 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.10, is-typed-array@^1.1.3, is-typed-array@^1.1.9: +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== @@ -8770,16 +8643,16 @@ is-wsl@^2.1.1, is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - 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" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + isbinaryfile@^4.0.10: version "4.0.10" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" @@ -9273,11 +9146,6 @@ jest@29.7.0: import-local "^3.0.2" jest-cli "^29.7.0" -jmespath@0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" - integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== - jose@^4.14.1, jose@^4.14.4: version "4.15.4" resolved "https://registry.yarnpkg.com/jose/-/jose-4.15.4.tgz#02a9a763803e3872cf55f29ecef0dfdcc218cc03" @@ -9547,11 +9415,11 @@ language-tags@^1.0.9: language-subtag-registry "^0.3.20" lerna@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/lerna/-/lerna-8.0.1.tgz#cc705467c5507c38c76ae293fe976e5d438aa876" - integrity sha512-ZxFMmOqwkP4e+q6BrMzxkAhixi6n0GVD2jAAnAfDkIFnwumB4/7X5/If6fqTlXXshtB2dQtN5OAtzafqVq8cwA== + version "8.0.2" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-8.0.2.tgz#ef014c4daacb886a602af94e6e7ca8994e140e97" + integrity sha512-nnOIGI5V5Af9gfraNcMVoV1Fry/y7/h3nCQYk0/CMzBYDD+xbNL3DH8+c82AJkNR5ABslmpXjW4DLJ11/1b3CQ== dependencies: - "@lerna/create" "8.0.1" + "@lerna/create" "8.0.2" "@npmcli/run-script" "7.0.2" "@nx/devkit" ">=17.1.2 < 18" "@octokit/plugin-enterprise-rest" "6.0.1" @@ -10330,7 +10198,7 @@ minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: minipass "^3.0.0" yallist "^4.0.0" -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: +mkdirp-classic@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== @@ -10387,14 +10255,6 @@ multimatch@5.0.0, multimatch@^5.0.0: arrify "^2.0.1" minimatch "^3.0.4" -multistream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/multistream/-/multistream-4.1.0.tgz#7bf00dfd119556fbc153cff3de4c6d477909f5a8" - integrity sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw== - dependencies: - once "^1.4.0" - readable-stream "^3.6.0" - mute-stream@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" @@ -10415,11 +10275,6 @@ nan@^2.18.0: resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - 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" @@ -10453,13 +10308,6 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-abi@^3.3.0: - version "3.45.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.45.0.tgz#f568f163a3bfca5aacfce1fbeee1fa2cc98441f5" - integrity sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ== - dependencies: - semver "^7.3.5" - node-fetch@2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" @@ -10467,7 +10315,7 @@ node-fetch@2.6.7: dependencies: whatwg-url "^5.0.0" -node-fetch@^2.6.1, node-fetch@^2.6.6, node-fetch@^2.6.7, node-fetch@^2.6.9: +node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.6.9: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -10985,17 +10833,18 @@ obliterator@^2.0.1: resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== -oclif@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/oclif/-/oclif-4.1.0.tgz#486004caf6da8af9f5bdda681a616b5b2c180b45" - integrity sha512-4E6z1HOdUYXHu/cbbSv0gnbFJfR9BGc9Oa+e9l8SkRoicGnrEPMpuZyY2vxWPGwMndN6ijxxuFlVmw1/j+MJpg== - dependencies: - "@oclif/core" "^3.0.4" - "@oclif/plugin-help" "^5.2.14" - "@oclif/plugin-not-found" "^2.3.32" - "@oclif/plugin-warn-if-update-available" "^3.0.0" +oclif@^4.2.0: + version "4.3.8" + resolved "https://registry.yarnpkg.com/oclif/-/oclif-4.3.8.tgz#3fca80c5e1921f41b1254b88986f5fbc1d8664bb" + integrity sha512-mtu3VzDdg0R7jUymrzFP5GQPIP3LroOAY7A5sH0eCC8nW+FijiXIC0H7wxmq/pY+02GynCxTvWlnV5iDCncoeA== + dependencies: + "@aws-sdk/client-cloudfront" "^3.496.0" + "@aws-sdk/client-s3" "^3.496.0" + "@oclif/core" "^3.18.1" + "@oclif/plugin-help" "^6.0.9" + "@oclif/plugin-not-found" "^3.0.8" + "@oclif/plugin-warn-if-update-available" "^3.0.9" async-retry "^1.3.3" - aws-sdk "^2.1231.0" change-case "^4" debug "^4.3.3" eslint-plugin-perfectionist "^2.1.0" @@ -11130,11 +10979,6 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== -p-is-promise@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" - integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -11603,40 +11447,6 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -pkg-fetch@3.4.2: - version "3.4.2" - resolved "https://registry.yarnpkg.com/pkg-fetch/-/pkg-fetch-3.4.2.tgz#6f68ebc54842b73f8c0808959a9df3739dcb28b7" - integrity sha512-0+uijmzYcnhC0hStDjm/cl2VYdrmVVBpe7Q8k9YBojxmR5tG8mvR9/nooQq3QSXiQqORDVOTY3XqMEqJVIzkHA== - dependencies: - chalk "^4.1.2" - fs-extra "^9.1.0" - https-proxy-agent "^5.0.0" - node-fetch "^2.6.6" - progress "^2.0.3" - semver "^7.3.5" - tar-fs "^2.1.1" - yargs "^16.2.0" - -pkg@^5.8.1: - version "5.8.1" - resolved "https://registry.yarnpkg.com/pkg/-/pkg-5.8.1.tgz#862020f3c0575638ef7d1146f951a54d65ddc984" - integrity sha512-CjBWtFStCfIiT4Bde9QpJy0KeH19jCfwZRJqHFDFXfhUklCx8JoFmMj3wgnEYIwGmZVNkhsStPHEOnrtrQhEXA== - dependencies: - "@babel/generator" "7.18.2" - "@babel/parser" "7.18.4" - "@babel/types" "7.19.0" - chalk "^4.1.2" - fs-extra "^9.1.0" - globby "^11.1.0" - into-stream "^6.0.0" - is-core-module "2.9.0" - minimist "^1.2.6" - multistream "^4.1.0" - pkg-fetch "3.4.2" - prebuild-install "7.1.1" - resolve "^1.22.0" - stream-meter "^1.0.4" - pluralize@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" @@ -11647,24 +11457,6 @@ postinstall-postinstall@^2.1.0: resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ== -prebuild-install@7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" - integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - preferred-pm@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.0.3.tgz#1b6338000371e3edbce52ef2e4f65eb2e73586d6" @@ -11724,11 +11516,6 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== -progress@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - promise-all-reject-late@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" @@ -11832,11 +11619,6 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== - punycode@^2.1.0, punycode@^2.1.1: version "2.3.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" @@ -11852,11 +11634,6 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -11887,16 +11664,6 @@ ramda@^0.27.1: resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.2.tgz#84463226f7f36dc33592f6f4ed6374c48306c3f1" integrity sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA== -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - react-is@^16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -11933,7 +11700,7 @@ read-package-json-fast@^3.0.0: json-parse-even-better-errors "^3.0.0" npm-normalize-package-bin "^3.0.0" -read-package-json@6.0.4: +read-package-json@6.0.4, read-package-json@^6.0.0: version "6.0.4" resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz#90318824ec456c287437ea79595f4c2854708836" integrity sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw== @@ -11943,16 +11710,6 @@ read-package-json@6.0.4: normalize-package-data "^5.0.0" npm-normalize-package-bin "^3.0.0" -read-package-json@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.3.tgz#726116b75e00eac2075240995f05681af4ca7122" - integrity sha512-4QbpReW4kxFgeBQ0vPAqh2y8sXEB3D4t3jsXbJKIhBiF80KT6XRo45reqwtftju5J6ru1ax06A2Gb/wM1qCOEQ== - dependencies: - glob "^10.2.2" - json-parse-even-better-errors "^3.0.0" - normalize-package-data "^5.0.0" - npm-normalize-package-bin "^3.0.0" - read-package-json@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-7.0.0.tgz#d605c9dcf6bc5856da24204aa4e9518ee9714be0" @@ -12014,7 +11771,7 @@ read@^2.0.0: dependencies: mute-stream "~1.0.0" -readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.1.4, readable-stream@^2.3.5, readable-stream@~2.3.6: +readable-stream@^2.0.2, readable-stream@^2.3.5, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -12212,7 +11969,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.0.tgz#c1a0028c2d166ec2fbf7d0644584927e76e7400e" integrity sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg== -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.4: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.20.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== @@ -12406,16 +12163,6 @@ safe-stable-stringify@^2.3.1: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" - integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== - -sax@>=0.6.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - scoped-regex@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-2.1.0.tgz#7b9be845d81fd9d21d1ec97c61a0b7cf86d2015f" @@ -12538,12 +12285,7 @@ signal-exit@3.0.7, signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, s resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.1.tgz#96a61033896120ec9335d96851d902cc98f0ba2a" - integrity sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw== - -signal-exit@^4.1.0: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== @@ -12567,20 +12309,6 @@ sigstore@^2.0.0: "@sigstore/sign" "^2.1.0" "@sigstore/tuf" "^2.1.0" -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -12844,13 +12572,6 @@ stream-events@^1.0.5: dependencies: stubs "^3.0.0" -stream-meter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/stream-meter/-/stream-meter-1.0.4.tgz#52af95aa5ea760a2491716704dbff90f73afdd1d" - integrity sha512-4sOEtrbgFotXwnEuzzsQBYEV1elAeFSO8rSGeTwabuX1RRn/kEq9JVH7I0MRBhKVRR0sJkr0M0QCH7yOLf9fhQ== - dependencies: - readable-stream "^2.1.4" - stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" @@ -13052,11 +12773,6 @@ strip-json-comments@^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@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - strnum@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" @@ -13147,16 +12863,6 @@ syncpack@11.2.1: tightrope "0.1.0" ts-toolbelt "9.6.0" -tar-fs@^2.0.0, tar-fs@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - tar-fs@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.1.tgz#e44086c1c60d31a4f0cf893b1c4e155dabfae9e2" @@ -13176,7 +12882,7 @@ tar-stream@3.0.0: bl "^6.0.0" streamx "^2.12.5" -tar-stream@^2.0.0, tar-stream@^2.1.4, tar-stream@~2.2.0: +tar-stream@^2.0.0, tar-stream@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== @@ -13396,11 +13102,6 @@ ts-toolbelt@9.6.0: resolved "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz#50a25426cfed500d4a09bd1b3afb6f28879edfd5" integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== -tsconfck@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/tsconfck/-/tsconfck-3.0.0.tgz#b469f1ced12973bbec3209a55ed8de3bb04223c9" - integrity sha512-w3wnsIrJNi7avf4Zb0VjOoodoO0woEqGgZGQm+LHH9przdUI+XDKsWAXwxHA1DaRTjeuZNcregSzr7RaA8zG9A== - tsconfig-paths@^3.15.0: version "3.15.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" @@ -13703,35 +13404,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" - integrity sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ== - dependencies: - punycode "1.3.2" - querystring "0.2.0" - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.4: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -uuid@8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" - integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== - uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" @@ -13910,7 +13587,7 @@ which-typed-array@^1.1.11: gopd "^1.0.1" has-tostringtag "^1.0.0" -which-typed-array@^1.1.2, which-typed-array@^1.1.9: +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== @@ -14054,19 +13731,6 @@ ws@^8.0.0, ws@^8.11.0, ws@^8.13.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== -xml2js@0.4.19: - version "0.4.19" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" - integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== - dependencies: - sax ">=0.6.0" - xmlbuilder "~9.0.1" - -xmlbuilder@~9.0.1: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ== - xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -14102,7 +13766,7 @@ yargs-parser@^20.2.2, yargs-parser@^20.2.3: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs@17.7.2, yargs@^17.6.2, yargs@^17.7.2: +yargs@17.7.2, yargs@^17.3.1, yargs@^17.6.2, yargs@^17.7.2: version "17.7.2" resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== @@ -14128,19 +13792,6 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.3.1: - version "17.7.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967" - integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - yeoman-environment@^3.15.1: version "3.19.3" resolved "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-3.19.3.tgz#49c2339805fdf695fac42c88334a1daa94ee8b6c"